ปัญหา
เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของจำนวนเต็ม arr เป็นอาร์กิวเมนต์แรกและอาร์กิวเมนต์เดียว
สมมติว่าสองดัชนี i และ j ในอาร์เรย์ที่ตรงตามเงื่อนไขต่อไปนี้ -
-
ฉัน <เจ และ
-
arr[i] <=arr[j]
จากทูเพิลดัชนีทั้งหมด (i, j) ฟังก์ชันของเราควรคืนค่าผลต่าง j - i โดยที่ค่าสูงสุดคือค่าสูงสุด
ตัวอย่างเช่น หากอินพุตของฟังก์ชันคือ −
const arr = [6, 0, 8, 2, 1, 5];
จากนั้นผลลัพธ์ควรเป็น −
const output = 4;
คำอธิบายผลลัพธ์
ความแตกต่างสูงสุดอยู่ที่ (i, j) =(1, 5):arr[1] =0 และ arr[5] =5.
ตัวอย่าง
รหัสสำหรับสิ่งนี้จะเป็น −
const arr = [6, 0, 8, 2, 1, 5];
const maximumDifference = (arr = []) => {
let max = 0
const stack = [0]
for (let i = 1; i < arr.length; i++) {
if (arr[i] < arr[stack[stack.length - 1]]) {
stack.push(i)
}
}
for (let i = arr.length - 1; i >= 0; i--) {
while (arr[i] >= arr[stack[stack.length - 1]]) {
max = Math.max(max, i - stack.pop())
}
}
return max;
};
console.log(maximumDifference(arr)); ผลลัพธ์
และผลลัพธ์ในคอนโซลจะเป็น −
4