Computer >> Máy Tính >  >> Lập trình >> Javascript

Tìm ba phần tử có tổng bắt buộc trong một mảng trong JavaScript

Chúng tôi được yêu cầu viết một hàm JavaScript nhận một mảng số làm đối số thứ nhất và một số duy nhất làm đối số thứ hai. Sau đó, hàm sẽ chọn ba số như vậy từ mảng, (nếu chúng tồn tại) có tổng bằng số được chỉ định bởi đối số thứ hai.

Cuối cùng, hàm sẽ trả về một mảng các mảng của tất cả các bộ ba như vậy nếu chúng tồn tại, một mảng trống nếu không.

Ví dụ -

Nếu mảng đầu vào và số là -

const arr = [2, 5, 7, 8, 9, 11, 1, 6];
const sum = 22;

Sau đó, kết quả đầu ra phải là -

const output = [ [ 2, 9, 11 ], [ 5, 6, 11 ], [ 5, 8, 9 ], [ 6, 7, 9 ] ];

Ví dụ

Mã cho điều này sẽ là -

const arr = [2, 5, 7, 8, 9, 11, 1, 6];
const sum = 22;
const threeSum = (arr = [], sum) => {
   arr.sort((a,b) => a - b);
   const res = [];
   for(let i=0; i < arr.length - 2; i++){
      if(arr[i] != arr[i-1]){
         let left = i + 1;
         let right = arr.length - 1;
         while (left < right){
            const curr = arr[i] + arr[left] + arr[right];
            if (curr === sum){
               res.push([arr[i], arr[left], arr[right]]);
               while(arr[left] == arr[left + 1]) left ++
               while(arr[right] == arr[right - 1]) right -- // making sure
               our solution set does not contain duplicate res
               left ++;
               right --;
            } else if(curr < sum) {
               left ++
            } else if(curr > sum){
               right --
            };
         };
      };
   };
   return res
};
console.log(threeSum(arr, sum));

Đầu ra

Và đầu ra trong bảng điều khiển sẽ là -

[ [ 2, 9, 11 ], [ 5, 6, 11 ], [ 5, 8, 9 ], [ 6, 7, 9 ] ]