9.15 奇安信前端笔试
又是一题没a出来。。。 25% 50% 蹲个大佬的题解好了
- 两个商场 都买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 }
- 在一个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) }