Buildings With an Ocean View

輸入一個 array,array 中一定會有元素,而每個元素代表大樓高度,array 的最右邊則是海。輸出一個 boolean array,標示該棟大樓是否看得到海(Note: 可能被右邊高的建築,擋到視野)

Example

// input example: [6, 3, 4, 1, 2, 1] ~~sea~~
function checkIfSeaCanBeSeen(arr){
// TODOS
}
console.log(checkIfSeaCanBeSeen([6, 3, 4, 1, 2, 1]));
// [true, false, true, false, true, true]

Answer

如果是讓人類用肉眼檢查,可以是站在海上,往大樓方向看去,能看到的大樓就一定可以反過來看得到海。所以可以從 array 的靠海處,也就是由後到前 loop 一次 array,並在過程中記下當前遇到最高的大樓層數,只要當前 loop 到的樓層高於遇到的當前最高樓層,該大樓就一定可以看得到海

function checkIfSeaCanBeSeen(array) {
let high = array[array.length - 1];
let length = array.length - 2;
let newArray = [true];
for (let i = length; i >= 0; i--) {
if (array[i] > high) {
high = array[i];
newArray.unshift(true);
} else {
newArray.unshift(false);
}
}
return newArray;
}