เรามีอาร์เรย์ของจำนวนเต็มซึ่งถูกจัดเรียงตามลำดับที่เพิ่มขึ้น เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์เช่นอาร์กิวเมนต์แรกและหมายเลขผลรวมเป้าหมายเป็นอาร์กิวเมนต์ที่สอง
ฟังก์ชันควรค้นหาและส่งกลับตัวเลขสองตัวดังกล่าวจากอาร์เรย์ที่เมื่อเพิ่มเข้าไปจะให้ผลรวมของเป้าหมาย เงื่อนไขในการแก้ปัญหานี้คือเราต้องทำสิ่งนี้ในเวลาเชิงเส้นและใช้ปริภูมิคงที่
ตัวอย่าง
ต่อไปนี้เป็นรหัส -
const arr = [4, 6, 8, 9, 11, 12, 18, 21];
const num = 27;
const findElements = (arr = [], target) => {
let left = 0;
let right = arr.length - 1;
let res = [];
while (left < right) {
let leftElement = arr[left];
let rightElement = arr[right];
if (leftElement + rightElement === target) {
res.push(arr[left]);
res.push(arr[right]);
break;
} else if (leftElement + rightElement > target) {
right--;
} else {
left++;
}
}
return res;
};
console.log(findElements(arr, num)); ผลลัพธ์
ต่อไปนี้เป็นเอาต์พุตคอนโซล -
[6, 21]