ปัญหา
เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลข arr เป็นอาร์กิวเมนต์เดียว
ฟังก์ชันควรสร้างอาร์เรย์ใหม่สำหรับอินพุต ซึ่งองค์ประกอบที่สอดคล้องแต่ละตัวคือระยะทางไปยังองค์ประกอบที่มากกว่าถัดไปจากองค์ประกอบปัจจุบัน และหากไม่มีองค์ประกอบที่มากกว่าด้านขวาขององค์ประกอบปัจจุบัน เราควรใส่ 0 สำหรับองค์ประกอบที่สอดคล้องในอาร์เรย์ผลลัพธ์ และสุดท้ายคืนค่าอาร์เรย์นี้
ตัวอย่างเช่น หากอินพุตคือ
อินพุต
const arr = [12, 13, 14, 11, 16, 10, 12, 17, 19, 18];
เอาต์พุต
const output = [1, 1, 2, 1, 3, 1, 1, 1, 0, 0];
คำอธิบายเอาต์พุต
เพราะองค์ประกอบที่มากกว่าถัดไปของ 12 คือ 13 ห่าง 1 บล็อก
องค์ประกอบที่มากกว่าถัดไปของ 13 คือ 14 ห่าง 1 บล็อก
องค์ประกอบที่มากกว่าถัดไปของ 14 คือ 16 ห่าง 2 บล็อก และต่อไป...
ตัวอย่างโค้ด
const arr = [12, 13, 14, 11, 16, 10, 12, 17, 19, 18];
const findNextGreater = (arr = []) => {
const stack = [];
const res = new Array(arr.length).fill(0);
for (let i = 0; i < arr.length; i++) {
while (arr[i] > arr[stack[stack.length - 1]] && stack.length > 0) {
const index = stack.pop();
res[index] = i - index;
}
stack.push(i);
};
return res;
};
console.log(findNextGreater(arr));
ผลลัพธ์
[1, 1, 2, 1, 3, 1, 1, 1, 0, 0]