Computer >> 컴퓨터 >  >> 프로그램 작성 >> JavaScript

JavaScript의 배열에서 필요한 합계가 있는 세 개의 요소 찾기

<시간/>

숫자 배열을 첫 번째 인수로, 단일 숫자를 두 번째 인수로 취하는 JavaScript 함수를 작성해야 합니다. 그런 다음 함수는 배열에서 해당 숫자 세 개를 선택해야 합니다(존재하는 경우). 합은 두 번째 인수로 지정된 숫자와 같습니다.

함수는 마지막으로 그러한 모든 삼중항이 존재하는 경우 배열의 배열을 반환해야 하고, 그렇지 않으면 빈 배열을 반환해야 합니다.

예를 들어 -

입력 배열과 숫자가 -

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

그러면 출력은 다음과 같아야 합니다. -

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

예시

이에 대한 코드는 -

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));

출력

콘솔의 출력은 -

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