Open Genzhen opened 3 years ago
每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案 欢迎大家在下方发表自己的优质见解 二维码加载失败可点击 小程序二维码
每日一题会在下午四点在交流群集中讨论,五点小程序中更新答案 欢迎大家在下方发表自己的优质见解
1)暴力双重循环
function findMaxRight(array) { let result = []; for (let i = 0; i < array.length - 1; i++) { for (let j = i + 1; j < array.length; j++) { if (array[j] > array[i]) { result[i] = array[j]; break; } else { result[i] = -1; } } } result[result.length] = -1; return result; }
2)利用栈的特性
function findMaxRightWithStack(array) { const size = array.length; let indexArr = [0]; let result = []; let index = 1; while (index < size) { if ( indexArr.length > 0 && array[indexArr[indexArr.length - 1]] < array[index] ) { result[indexArr[indexArr.length - 1]] = array[index]; indexArr.pop(); } else { indexArr.push(index); index++; } } indexArr.forEach((item) => { result[item] = -1; }); return result; }
3)单调递减栈, 反向遍历
const firstBiggerItem = (T) => { const res = new Array(T.length).fill(-1); const stack = []; for (let i = T.length - 1; i >= 0; i--) { while (stack.length && T[i] >= T[stack[stack.length - 1]]) { stack.pop(); } if (stack.length && T[i] < T[stack[stack.length - 1]]) { res[i] = T[stack[stack.length - 1]]; } stack.push(i); } return res; }; // test var T = [2, 6, 3, 8, 10, 9]; console.log(firstBiggerItem(T));
大佬😊
只会双循环是不是废了
扫描下方二维码,收藏关注,及时获取答案以及详细解析,同时可解锁800+道前端面试题。
参考代码实现
1)暴力双重循环
2)利用栈的特性
3)单调递减栈, 反向遍历