Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Tìm ba phần tử có tổng cho trước trong mảng JavaScript

Viết hàm tìm tất cả bộ ba số trong mảng có tổng bằng giá trị cho trước. Trả về mảng các bộ ba (không trùng lặp).

Ví dụ: arr=[2,5,7,8,9,11,1,6], sum=22 → [[2,9,11],[5,6,11],[5,8,9],[6,7,9]].

Ví dụ

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, 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--;
          left++; right--;
        } else if (curr < sum) left++;
        else right--;
      }
    }
  }
  return res;
};
console.log(threeSum(arr, sum));

Kết quả

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