📅  最后修改于: 2023-12-03 15:26:37.702000             🧑  作者: Mango
给定一个数组,找到其中所有元素,使它的值都小于它在数组中的右侧所有元素的值。
我们可以从右到左遍历整个数组,维护一个最大值,若当前位置的值小于最大值,则说明它的值小于它右侧的所有元素。将该元素放入一个新数组中即可。
function findElements(arr) {
let max = null;
let res = [];
for (let i = arr.length - 1; i >=0; i--) {
if (max === null || arr[i] < max) {
max = arr[i];
res.unshift(max);
}
}
return res;
}
findElements([3, 2, 5, 8, 1, 4, 7, 6]) // [1, 4, 6]
findElements([5, 4, 3, 2, 1]) // [1]
findElements([1, 2, 3, 4, 5]) // [1, 2, 3, 4, 5]
该算法只需一次遍历,所以时间复杂度为 O(n)。
该算法只需要一个数组作为临时存储,所以空间复杂度为 O(n)。