10.13途虎前端笔试
选择题
问了数据库、计网、linux,操作系统。都是一两道。其他的大部分是前端问题。 体验感觉还不错
编程题
1. 货物上架 100%
货物编号target(如7) 上架到货物上面,每个物品只有一个,编号唯一。货架是按照升序排列。
要求:1. 货物如果在架子上,则返回目前的index值
2. 如果不在架子上,则返回货物上架后的index值
3. 时间复杂度logn
思路:就是二分法,感觉就是签到题
输入:nums=[1,3,5,8] target=4
输出: 2 [1,3,4,5,8] 4的index是2
function searchInsert( nums , target ) { if(nums.length<=0){ return 0 } // write code here if(nums.indexOf(target)!=-1){ return nums.indexOf(target) }else if(target<nums[0]){ return 0 }else if(target>nums[nums.length-1]){ return nums.length }else{ // 此时货架上肯定没有该物品 let r=0,l=nums.length; while(r<l){ let mid = r+Math.floor((l-r)/2) if(nums[mid]<target&&nums[mid+1]>target){ return mid+1 } else if(nums[mid]<target){ r = mid }else if(nums[mid]>target){ l = mid } } } }
2. 运送轮胎 60%
有三堆轮胎,工人汽车每次可以运送2个轮胎,要求每堆每次最多只能拿走1个轮胎。运送轮胎到终点则加1分。如果有两堆以上轮胎为0,则游戏结束。求最大分数值
输入:[2,4,6] 输出:6 先拿2,6的 拿完是 [0,4,4] 再拿4,4的 拿完是[0,0,0] 总分数应该是2+4
思路:感觉很简单啊,存到数组内然后排序,第一次排序把第一项的值加上,最后一项的值-=第一项的值,第一项的值=0。然后进行第二次排序,把第二项的值加上,最后一项的值-=第二项的值,第二项的值=0。不知道思路哪里有问题,总觉得自己没错。
function computeMaxScore( a , b , c ) { // write code here let nums = [a,b,c] let res = 0 nums.sort((a,b)=>a-b) res+=nums[0] nums[2]-=nums[0] nums[0]=0 nums.sort((a,b)=>a-b) res+=nums[1] nums[2]-=nums[1] nums[1]=0 return res }
3. 排列最大 66.6%
一个数组[1,2,3,4,50,6] 要求里面的数排列组合起来成一个最大的值。结果可能非常大,需要返回string类型。
输入:[1,30,4,9] 输出:'94301'
思路:首先判断每个数的首位是不是最大的,比如'90'的第一位是9 那这个数肯定排前面。 也有可能碰到'93'这样的数,这个时候93就应该放前面。极端的情况都想了一遍,比如[99,991,9991,99991] 输出的话应该是'99999919991991'。还是不知道为啥只过了66.7。
function largestNumber( toys ) { // write code here let res = '' while(toys.length){ let temp=null for(let i=0;i<toys.length;i++){ if(temp!=null){ // 992 993 if(Number(String(toys[temp])[0])>Number(String(toys[i])[0])){ }else if(Number(String(toys[temp])[0])==Number(String(toys[i])[0])){ // 99 991 let l = 1,r=1; let temp_l = String(toys[temp]) let temp_r = String(toys[i]) while(l<temp_l.length&&r<temp_r.length){ if(temp_l[l]==temp_r[r]){ l++ r++ }else if(Number(temp_l[l])>Number(temp_r[r])){ // 99 91 temp=temp break; }else if(Number(temp_l[l])<Number(temp_r[r])){ temp=i break; } } if(l==temp_l.length&&r<temp_r.length){ temp=temp }else if(l<temp_l.length&&r==temp_r.length){ temp = i } }else{ temp = i } }else{ temp=i } } if(temp!=null){res += toys[temp]} toys.splice(temp,1) } return res // 9999191 // 9991991 }#途虎##途虎养车##笔试##途虎前端##途虎笔试#