头条.字节跳动、算法题目完成
- 闲着无聊就看到一个
CSDN
博主发的 字节跳动面试题 - 其中有一道最为好玩
掉头发的题目
![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/24953e33622a69668ffada2246f1256b.png)
所以我闲着无聊、掉几根头发试试,哈哈!!!
let map = [0,1,0,2,1,0,1,3,2,1,2,1];
let rainTotal = 0;
let startIndex = 0;
let endIndex = 0;
do {
let endIndex = findEndIndex(startIndex, map);
if(endIndex == -1) {
console.log("结束查询:1>", rainTotal);
break;
}
let val = findStartToEndNum(startIndex, endIndex, map);
rainTotal += val;
console.log("容器存储值<<<", val);
startIndex = endIndex;
} while(startIndex < map.length);
console.log("结束计算:2>", rainTotal);
function findEndIndex(startIndex, arr) {
if((startIndex + 1) >= arr.length) {
return -1;
}
for(let i = (startIndex + 1); i < arr.length; i ++) {
if(arr[startIndex] <= arr[i]) {
return i;
}
}
return startIndex + 1;
}
function findStartToEndNum(startIndex, endIndex, arr) {
let min = arr[startIndex] < arr[endIndex]?arr[startIndex]:arr[endIndex];
console.log("最小值计算>>>", '起始值', arr[startIndex], '结尾值', arr[endIndex], '最小值', min);
let num = 0;
for(let i = (startIndex+1); i < endIndex; i ++) {
num += (min - arr[i]);
}
return num;
}
最终执行输出
最小值计算>>> 起始值 0 结尾值 1 最小值 0
容器存储值<<< 0
最小值计算>>> 起始值 1 结尾值 2 最小值 1
容器存储值<<< 1
最小值计算>>> 起始值 2 结尾值 3 最小值 2
容器存储值<<< 4
最小值计算>>> 起始值 3 结尾值 2 最小值 2
容器存储值<<< 0
最小值计算>>> 起始值 2 结尾值 2 最小值 2
容器存储值<<< 1
最小值计算>>> 起始值 2 结尾值 1 最小值 1
容器存储值<<< 0
结束查询:1> 6
结束查询:2> 6