งานของเราคือการเขียนฟังก์ชันที่แก้ปัญหาผลรวมสองผลได้ในเวลาเชิงเส้นมากที่สุด
ปัญหาสองผลรวม
จากอาร์เรย์ของจำนวนเต็ม เราต้องหาตัวเลขสองตัวเพื่อที่จะรวมกันเป็นตัวเลขเป้าหมายเฉพาะ
ฟังก์ชัน twoSum ควรส่งคืนดัชนีของตัวเลขสองตัวที่รวมกันเป็นเป้าหมาย และหากไม่มีองค์ประกอบสองตัวรวมกันเป็นเป้าหมาย ฟังก์ชันของเราควรส่งคืนอาร์เรย์ว่าง
การแก้ปัญหาในเวลา O(n)
เราจะใช้ hashmap เพื่อบันทึกรายการที่ปรากฏแล้วในแต่ละรอบเราจะตรวจสอบว่ามีองค์ประกอบใด ๆ ในแผนที่ซึ่งเมื่อเพิ่มไปยังองค์ประกอบปัจจุบันเพิ่มไปยังเป้าหมายหากมีเราจะส่งคืนอาร์เรย์ที่มี ดัชนีและหากเราผ่านลูปทั้งหมดโดยไม่ผ่านเงื่อนไขนี้ เราจะคืนค่าอาร์เรย์ที่ว่างเปล่า
ตัวอย่าง
const arr = [2, 5, 7, 8, 1, 3, 6, 9, 4];
const sum = 10;
const twoSum = (arr, sum) => {
const map = {};
for(let i = 0; i < arr.length; i++){
const el = sum - arr[i];
if(map[el]){
return [map[el], i];
};
map[arr[i]] = i;
};
return [];
};
console.log(twoSum(arr, sum));
console.log(twoSum(arr, 12));
console.log(twoSum(arr, 13));
console.log(twoSum(arr, 14));
console.log(twoSum(arr, 24)); ผลลัพธ์
ผลลัพธ์ในคอนโซลจะเป็น -
[ 2, 5 ] [ 1, 2 ] [ 1, 3 ] [ 3, 6 ] []