// tom:[1,2,-5,1,3] jerry:[-1,0,3,-1,1] function howToChange(tom, jerry) { let delat = new Map(), maxCount = 0; for(let i = 0; i < tom.length; i++) { let res = tom[i] - jerry[i]; if(delat.has(res)) { delat.set(res, delat.get(res) + 1) } else { delat.set(res, 1) } maxCount = Math.max(maxCount, delat.get(res)) } return tom.length - maxCount; } console.log(howToChange([1,2,-5,1,3], [-1,0,3,-1,1]));
console.log(ohMyMonika(5, 'abccd', ['1 2', '2 3', '2 4', '2 5'])); // 5 console.log(ohMyMonika(1, 'ab', ['1 2'])); // 1 function ohMyMonika(n, s, rArr) { // 用map来记录关系; count记录整理了的条数,当count === rArr.length时即整理完毕了 let nodeVal = 1, map = new Map(), count = 0; while(count < rArr.length) { let childArr = [] map.set(nodeVal, childArr) for(let i = 0; i < rArr.length; i++) { if(rArr[i].includes(nodeVal)) { // 把子节点取出来 let index = rArr[i].indexOf(nodeVal); let val = (index === 0? parseInt(rArr[i][2]):parseInt(rArr[i][0])); // 把子节点存到map中去 childArr.push(val) count++; // 反手炸掉指挥部,即下次不要再遍历到相同的值了,所以赋个别的值改掉他 rArr[i] = 'boom' } } nodeVal++; } // 循环结束后,map即树就构建完了 console.log(map); // 遍历构建总的管理量————应该有递归的,但是我想不清楚 // 题目要求管理量是累加的,比如Monika的子节点是2,则Monika的管理量是直接管理的节点2和2的管理的点 let sum = 0 for(let item of map.keys()) { let res = getRes(item); sum += res; } return sum function getRes(item) { // 最末端的节点就返回0 if(!map.has(item)) { return 0 } else { let sum = 0; let arr = map.get(item); // 使用set来过滤相同的值 let set = new Set(); for(let item1 of arr) { sum += getRes(item1) set.add(s[item1 - 1]) } return sum + set.size; } } }