ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน 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]