第一题忽略,第二题大数计算(注意点就是以链表尾巴存数字最高位,计算完后反转链表)
第三题解析
细细观察,发现是两个黑的中间可以存储水 是不是类似括号的判断
那么一行一行观察 左括号和右括号中间取中间内容
上代码先:
function main(arr){
let max = Math.max(...arr)
let list = []
for(let i=0;i<arr.length;i++){
list.push(new Array(max).fill(0).fill(1,0,arr[i]))
}
let sum = 0;
for(let i=0;i<max;i++){
sum += calc(list, i)
}
console.log(sum)
}
function calc(list,index){
let start = false
let begin = 0;
let sum = 0;
for(let i=0;i<list.length;i++){
if(list[i][index]){
if(start){
start = false
sum += i-begin-1
}else{
start = true
begin = i;
}
}
}
return sum
}
main( [0,1,0,2,1,0,1,3,2,1,2,1]); //console.log(6)
思路就是
1.找到最大的长度 Math.max(...arr)
2.根据数字对应转换成黑框 是1就是黑框 是0就是空没有框 如 1 那就是最底1 层是黑框
3.根据黑框一开一闭统计中间个数
本来这样已经得出答案 本着不优化不写文章的思路
function main(arr){
let max = Math.max(...arr)
let sum = 0;
for(let i=0;i<max;i++){
sum += calc(arr, i)
}
console.log(sum)
}
function calc(arr,index){
let start = false
let begin = 0;
let sum = 0;
for(let i=0;i<arr.length;i++){
if(arr[i] >= index){
if(start){
start = false
sum += i-begin-1
}else{
start = true
begin = i;
}
}
}
return sum
}
main( [0,1,0,2,1,0,1,3,2,1,2,1]); //console.log(6)
只要大于当前数字 那就说明存在黑框