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

Tìm tổng nhỏ nhất của tất cả các chỉ số của các cặp số duy nhất tính tổng thành một số nhất định trong JavaScript

Chúng ta được yêu cầu viết một hàm nhận một mảng số làm đối số đầu tiên và một tổng đích làm đối số thứ hai. Sau đó, chúng tôi muốn lặp qua mảng và sau đó cộng từng giá trị với nhau (ngoại trừ chính nó + chính nó).

Và nếu tổng của hai giá trị được lặp lại bằng tổng mục tiêu và cặp giá trị chưa gặp phải trước đó, thì chúng tôi nhớ các chỉ số của chúng và cuối cùng, trả về tổng đầy đủ của tất cả các chỉ số đã nhớ.

Nếu mảng là -

const arr = [1, 4, 2, 3, 0, 5];

Và tổng là -

const sum = 7;

Sau đó, đầu ra phải là 11, bởi vì,

4 + 3 = 7
5 + 2 = 7

Chỉ mục -

4 [index: 1]
2 [index: 2]
3 [index: 3]
5 [index: 5]

tức là

1 + 2 + 3 + 5 = 11

Ví dụ

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

const arr = [1, 4, 2, 3, 0, 5];
const findIndexSum = (arr = [], sum = 0) => {
   let copy = arr.slice(0);
   const used = [];
   let index = 0, indexFirst = 0, indexSecond, first, second;
   while (indexFirst < copy.length){
      indexSecond = indexFirst + 1;
      while(indexSecond < copy.length){
         first = copy[indexFirst];
         second = copy[indexSecond];
         if (first + second === sum){
            used.push(first, second);
            copy = copy.filter(el => first !== el && second !== el );
            indexFirst--;
            break;
         }
         indexSecond++;
      }
      indexFirst++;
   };
   const indexSum = used.sort().reduce((acc, val, ind) => {
      const fromIndex = ind === 0 || val !== used[ind - 1] ? 0 : index + 1 index = arr.indexOf(val, fromIndex);
      return acc + index;
   }, 0);
   return indexSum;
};
console.log(findIndexSum(arr, 7));

Đầu ra

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

11