Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Javascript

มีวิธีใดที่มีประสิทธิภาพมากกว่านี้ในการเขียนโค้ดคำถาม "2 ผลรวม" JavaScript


งานของเราคือการเขียนฟังก์ชันที่แก้ปัญหาผลรวมสองผลได้ในเวลาเชิงเส้นมากที่สุด

ปัญหาสองผลรวม

จากอาร์เรย์ของจำนวนเต็ม เราต้องหาตัวเลขสองตัวเพื่อที่จะรวมกันเป็นตัวเลขเป้าหมายเฉพาะ

ฟังก์ชัน 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 ]
[]