ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของตัวเลข arr เป็นอาร์กิวเมนต์แรกและอาร์กิวเมนต์เดียว
ฟังก์ชันของเราควรสร้างอาร์เรย์ใหม่สำหรับการป้อนข้อมูล โดยที่แต่ละองค์ประกอบที่เกี่ยวข้องกันเป็นระยะทางไปยังองค์ประกอบที่ใหญ่กว่าถัดไปจากองค์ประกอบปัจจุบัน และหากไม่มีองค์ประกอบใดที่ใหญ่กว่าทางด้านขวาขององค์ประกอบปัจจุบัน เราควรกด 0 สำหรับองค์ประกอบนั้นที่สอดคล้องกัน ในอาร์เรย์ res และสุดท้ายเราควรคืนค่าอาร์เรย์นี้
ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ
ป้อนข้อมูล
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]