9.15 奇安信前端笔试

又是一题没a出来。。。 25% 50% 蹲个大佬的题解好了

  1. 两个商场 都买0-N-1编号的商品,每个商场的价格不一样,优惠政策也不一样。
    A场:买三打6折,B场:买3免1,买3件 不用付最便宜那件衣服的价格
    输入:[1,8,2],[4,3,5] 输出:6 在A商场买[1,2] B商场买[3]
    // 有些用例不记得了... 感觉这题挺难的 没想出什么好的解法,只想到了笨方法
    var lossLess = function (numsA,numsB) { 
     function sum(nums){
         return nums.reduce((a,b)=>a+b)
     }
     function Free1(nums){
         // b商场的优惠 直接封装函数好了
         nums.sort((a,b)=>a+b)
         return nums[1]+nums[2]
     }
     let cost =  0
     let len =numsA.length // 长度肯定相同的
     if(len<3){
         // 直接算总和最小额
         return Math.min(sum(numsA),sum(numsB))
     }
     //i>3
     let i=0
     while(i<len){ //0 1 2 3|4
         if(i+2<len){
             let nA = numsA.slice(i,i+3)
             let nB = numsB.slice(i,i+3)
             let lessCost = 0
             // 算前三个那个钱少
             for(let k=0;k<nA.length;k++){
                 if(nA[k]<nB[k]){
                     lessCost+=nA[k]
                 }else{
                     lessCost+=nB[k]
                 }
             }
             cost += Math.min(Math.floor(sum(nA)*0.6),Free1(nB),lessCost)
             i+=2
         }else if(numsA[i]<numsB[i]){
             cost+=numsA[i]
         }else{
             cost+=numsB[i]
         }
         i++
     }
     return cost
    }
  2. 在一个100*100的网格里,一只蚂蚁从原点开始走,交叉点上有食物,请问蚂蚁拿到全部食物最少需要多少步?
    输入:[[0,1],[0,2],[0,3]] 输出:3 从00走到01走到02走到03 每次加1
    思路:我用的回溯算法,先把食物距离原点近到远的顺序排列。再把每次的path存下来 最后把path的总和添加到res中,最后输出res中最小的值。这个只过了50%。
    var getMinLen = function (maps) { 
        // write code here
        let res = []
        let path = []
        // 排序成距离原点位置近的在左
        maps.sort((a,b)=>((a[0]-0)+(a[1]-0))-((b[0]-0)+(b[1]-0)))
        function Tracer(left,right,startIndex){
            if(path.length==maps.length){
                // console.log(path)
                res.push(path.reduce((a,b)=>a+b))
            }
            for(let i=startIndex;i<maps.length;i++){
                let distance = Math.abs(maps[i][0]-left)+Math.abs(maps[i][1]-right)
                path.push(distance)
                Tracer(maps[i][0],maps[i][1],i+1)
                path.pop()
            }
        }
        Tracer(0,0,0)
        return Math.min(...res)
    }
#奇安信##奇安信秋招##奇安信笔试##奇安信23秋招笔试好难呀#
全部评论
我想问一下你的奇安信大题里可以选择js v8语言吗
点赞 回复 分享
发布于 2022-09-15 21:38 江苏
第二个每次找离当前点最近的,过了75
点赞 回复 分享
发布于 2022-09-15 23:09 陕西

相关推荐

点赞 评论 收藏
分享
2 12 评论
分享
牛客网
牛客企业服务