Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การหาค่าสูงสุดและตำแหน่งทั้งหมดในอาร์เรย์ใน JavaScript

พื้นฐาน

สมมติว่าเรามีอาร์เรย์ต่อไปนี้ใน JavaScript

const arr = [4, 3, 4, 7, 5, 2, 3, 4, 3, 2, 3, 4];

หากเรานำจุดของอาร์เรย์นี้ไปพล็อตบนแกน y โดยแต่ละจุดที่ติดกันห่างกัน 1 หน่วยบนแกน x กราฟจะมีลักษณะดังนี้

การหาค่าสูงสุดและตำแหน่งทั้งหมดในอาร์เรย์ใน JavaScript

กราฟนี้แสดงชัดเจนว่ามีค่าสูงสุดท้องถิ่น (local maxima / peaks) อยู่สองจุดในอาร์เรย์นี้ คือ ดัชนี 3 และ 7 ซึ่งมีค่าเป็น 7 และ 4 ตามลำดับ

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ของจำนวนเต็ม arr เป็นอาร์กิวเมนต์เดียว

ฟังก์ชันควรคืนค่าอ็อบเจกต์ที่มีสองพร็อพเพอร์ตี้ คือ maximas และ positions

ทั้งสองพร็อพเพอร์ตีนี้จะเป็นอาร์เรย์ โดยอาร์เรย์ maximas จะเก็บค่าของ local maximas ในอาร์เรย์ และอาร์เรย์ positions จะเก็บดัชนีที่สอดคล้องกัน

ตัวอย่างเช่น หากอินพุตคือ

ดังนั้น สำหรับอาร์เรย์ข้างต้น ผลลัพธ์ควรเป็นดังนี้

const output = { maximas: [7, 4], positions: [3, 7] };

ตัวอย่างโค้ด

const arr = [4, 3, 4, 7, 5, 2, 3, 4, 3, 2, 3, 4];
const findMaxima = (arr = []) => {
let positions = [];
let maximas = [];
for (let i = 1; i < arr.length - 1; i++) {
if (arr[i] > arr[i - 1]) {
if (arr[i] > arr[i + 1]) {
positions.push(i);
maximas.push(arr[i]);
} else if (arr[i] === arr[i + 1]) {
let temp = i;
while (arr[i] === arr[temp]) i++;
if (arr[temp] > arr[i]) {
positions.push(temp);
maximas.push(arr[temp]);
}
}
}
}
return { maximas, positions };
};
console.log(findMaxima(arr));

ผลลัพธ์

{ maximas: [ 7, 4 ], positions: [ 3, 7 ] }