JavaScript เชฎเชพเช‚ Google เช‡เชจเซเชŸเชฐเชตเซเชฏเซเชฎเชพเช‚เชฅเซ€ เชธเชฎเชธเซเชฏเชพเชจเซเช‚ เชจเชฟเชฐเชพเช•เชฐเชฃ: โ€‹โ€‹4 เช…เชฒเช— เช…เชฒเช— เชฐเซ€เชคเซ‡

JavaScript เชฎเชพเช‚ Google เช‡เชจเซเชŸเชฐเชตเซเชฏเซเชฎเชพเช‚เชฅเซ€ เชธเชฎเชธเซเชฏเชพเชจเซเช‚ เชจเชฟเชฐเชพเช•เชฐเชฃ: โ€‹โ€‹4 เช…เชฒเช— เช…เชฒเช— เชฐเซ€เชคเซ‡

เชœเซเชฏเชพเชฐเซ‡ เชนเซเช‚ เชเชฒเซเช—เซ‹เชฐเชฟเชงเชฎเซเชธเชจเชพ เชชเซเชฐเชฆเชฐเซเชถเชจเชจเซ‹ เช…เชญเซเชฏเชพเชธ เช•เชฐเซ€ เชฐเชนเซเชฏเซ‹ เชนเชคเซ‹, เชคเซเชฏเชพเชฐเซ‡ เชฎเชจเซ‡ เช† เชฎเชณเซเชฏเซเช‚ เช† เชเช• เช—เซ‚เช—เชฒ เชฎเซ‹เช• เช‡เชจเซเชŸเชฐเชตเซเชฏเซเชจเซ‹ เชตเซ€เชกเชฟเชฏเซ‹ เช›เซ‡.. เชคเซ‡ เชฎเชพเชคเซเชฐ เชฎเซ‹เชŸเชพ เชŸเซ‡เช•เซเชจเซ‹เชฒเซ‹เชœเซ€ เช•เซ‹เชฐเซเชชเซ‹เชฐเซ‡เชถเชจเซ‹เชฎเชพเช‚ เช‡เชจเซเชŸเชฐเชตเซเชฏเซ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชฒเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชคเซ‡เชจเซ‹ เช–เซเชฏเชพเชฒ เช†เชชเซ‡ เช›เซ‡, เชชเชฐเช‚เชคเซ เชเชฒเซเช—เซ‹เชฐเชฟเชงเชฎเชฟเช• เชธเชฎเชธเซเชฏเชพเช“เชจเซ‡ เชถเช•เซเชฏ เชคเซ‡เชŸเชฒเซ€ เช…เชธเชฐเช•เชพเชฐเช• เชฐเซ€เชคเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เชนเชฒ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชคเซ‡ เชธเชฎเชœเชตเชพ เชฎเชพเชŸเซ‡ เชชเชฃ เชคเชฎเชจเซ‡ เชชเชฐเชตเชพเชจเช—เซ€ เช†เชชเซ‡ เช›เซ‡.

เช† เชฒเซ‡เช– เช เชตเชฟเชกเซ€เชฏเซ‹เชจเซ‹ เชเช• เชชเซเชฐเช•เชพเชฐเชจเซ‹ เชธเชพเชฅ เช›เซ‡. เชคเซ‡เชฎเชพเช‚ เชนเซเช‚ เชฆเชฐเซเชถเชพเชตเซ‡เชฒ เชคเชฎเชพเชฎ เชธเซ‹เชฒเซเชฏเซเชถเชจเซเชธ เช…เชจเซ‡ JavaScript เชฎเชพเช‚ เชธเซ‹เชฒเซเชฏเซเชถเชจเชจเชพ เชฎเชพเชฐเชพ เชชเซ‹เชคเชพเชจเชพ เชธเช‚เชธเซเช•เชฐเชฃ เชชเชฐ เชŸเชฟเชชเซเชชเชฃเซ€เช“ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซเช‚ เช›เซเช‚. เชฆเชฐเซ‡เช• เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎเชจเซ€ เช˜เซ‹เช‚เช˜เชพเชŸเชจเซ€ เชชเชฃ เชšเชฐเซเชšเชพ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ€ เช›เซ‡.

เช…เชฎเซ‡ เชฏเชพเชฆ เช•เชฐเชพเชตเซ€เช เช›เซ€เช: Habrเชจเชพ เชคเชฎเชพเชฎ เชตเชพเชšเช•เซ‹ เชฎเชพเชŸเซ‡ - Habr เชชเซเชฐเซ‹เชฎเซ‹ เช•เซ‹เชกเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช•เซ‹เชˆเชชเชฃ เชธเซเช•เชฟเชฒเชฌเซ‹เช•เซเชธ เช•เซ‹เชฐเซเชธเชฎเชพเช‚ เชจเซ‹เช‚เชงเชฃเซ€ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ 10 เชฐเซ‚เชฌเชฒ เชกเชฟเชธเซเช•เชพเช‰เชจเซเชŸ.

เชธเซเช•เชฟเชฒเชฌเซ‹เช•เซเชธ เชญเชฒเชพเชฎเชฃ เช•เชฐเซ‡ เช›เซ‡: เชชเซเชฐเซ‡เช•เซเชŸเชฟเช•เชฒ เช•เซ‹เชฐเซเชธ "เชฎเซ‹เชฌเชพเช‡เชฒ เชกเซ‡เชตเชฒเชชเชฐ เชชเซเชฐเซ‹".

เชธเชฎเชธเซเชฏเชพเชจเซ€ เชฐเชšเชจเชพ

เช…เชฎเชจเซ‡ เช“เชฐเซเชกเชฐ เช•เชฐเซ‡เชฒ เชเชฐเซ‡ เช…เชจเซ‡ เชšเซ‹เช•เซเช•เชธ เชฎเซ‚เชฒเซเชฏ เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡. เชชเช›เซ€ เชคเซ‡เชจเซ‡ เชเช• เชซเช‚เช•เซเชถเชจ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เช•เชนเซ‡เชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡ เชœเซ‡ เชเชฐเซ‡เชฎเชพเช‚ เช•เซ‹เชˆเชชเชฃ เชฌเซ‡ เชธเช‚เช–เซเชฏเชพเช“เชจเซ‹ เชธเชฐเชตเชพเชณเซ‹ เช†เชชเซ‡เชฒ เชฎเซ‚เชฒเซเชฏ เชธเชฎเชพเชจ เชนเซ‹เชˆ เชถเช•เซ‡ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡เชจเชพ เช†เชงเชพเชฐเซ‡ เชธเชพเชšเซเช‚ เช•เซ‡ เช–เซ‹เชŸเซเช‚ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡.

เชฌเซ€เชœเชพ เชถเชฌเซเชฆเซ‹เชฎเชพเช‚ เช•เชนเซ€เช เชคเซ‹, เชถเซเช‚ เชเชฐเซ‡เชฎเชพเช‚ เชฌเซ‡ เชชเซ‚เชฐเซเชฃเชพเช‚เช•เซ‹ เช›เซ‡, x เช…เชจเซ‡ y, เช•เซ‡ เชœเซเชฏเชพเชฐเซ‡ เชเช•เชธเชพเชฅเซ‡ เช‰เชฎเซ‡เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เชคเซเชฏเชพเชฐเซ‡ เชจเชฟเชฐเซเชฆเชฟเชทเซเชŸ เชฎเซ‚เชฒเซเชฏ เชธเชฎเชพเชจ เชนเซ‹เชฏ?

เช‰เชฆเชพเชนเชฐเชฃ เช

เชœเซ‹ เช†เชชเชฃเชจเซ‡ เชเชฐเซ‡ [1, 2, 4, 9] เช†เชชเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช…เชจเซ‡ เชฎเซ‚เชฒเซเชฏ 8 เชนเซ‹เชฏ, เชคเซ‹ เชซเช‚เช•เซเชถเชจ เชซเซ‹เชฒเซเชธ เช†เชชเชถเซ‡ เช•เชพเชฐเชฃ เช•เซ‡ เชเชฐเซ‡เชฎเชพเช‚ เช•เซ‹เชˆ เชฌเซ‡ เชธเช‚เช–เซเชฏเชพ 8 เชธเซเชงเซ€ เช‰เชฎเซ‡เชฐเซ€ เชถเช•เชคเซ€ เชจเชฅเซ€.

เช‰เชฆเชพเชนเชฐเชฃ เชฌเซ€

เชชเชฐเช‚เชคเซ เชœเซ‹ เชคเซ‡ เชเชฐเซ‡ [1, 2, 4, 4] เช›เซ‡ เช…เชจเซ‡ เชฎเซ‚เชฒเซเชฏ 8 เช›เซ‡, เชคเซ‹ เชซเช‚เช•เซเชถเชจ เชธเชพเชšเซเช‚ เช†เชตเชตเซเช‚ เชœเซ‹เชˆเช เช•เชพเชฐเชฃ เช•เซ‡ 4 + 4 = 8.

เช‰เช•เซ‡เชฒ 1: เชฌเซเชฐเซเชŸ เชซเซ‹เชฐเซเชธ

เชธเชฎเชฏ เชœเชŸเชฟเชฒเชคเชพ: O(Nยฒ).
เชœเช—เซเชฏเชพ เชœเชŸเชฟเชฒเชคเชพ: O(1).

เชธเซŒเชฅเซ€ เชธเซเชชเชทเซเชŸ เช…เชฐเซเชฅ เช เช›เซ‡ เช•เซ‡ เชจเซ‡เชธเซเชŸเซ‡เชก เชฒเซ‚เชชเซเชธเชจเซ€ เชœเซ‹เชกเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเซ‹.

const findSum = (arr, val) => {
  for (let i = 0; i < arr.length; i++) {
    for (let j = 0; j < arr.length; j++) {
      if (i !== j && arr[i] + arr[j] === val) {
        return true;
      };
    };
  };
  return false;
};

เช† เช‰เช•เซ‡เชฒ เช•เชพเชฐเซเชฏเช•เซเชทเชฎ เชจเชฅเซ€ เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชเชฐเซ‡เชฎเชพเช‚ เชฌเซ‡ เช˜เชŸเช•เซ‹เชจเชพ เชฆเชฐเซ‡เช• เชธเช‚เชญเชตเชฟเชค เชธเชฐเชตเชพเชณเชพเชจเซ‡ เชคเชชเชพเชธเซ‡ เช›เซ‡ เช…เชจเซ‡ เชธเซ‚เชšเช•เชพเช‚เช•เซ‹เชจเซ€ เชฆเชฐเซ‡เช• เชœเซ‹เชกเซ€เชจเซ‡ เชฌเซ‡ เชตเชพเชฐ เชธเชฐเช–เชพเชตเซ‡ เช›เซ‡. (เช‰เชฆเชพเชนเชฐเชฃ เชคเชฐเซ€เช•เซ‡, เชœเซเชฏเชพเชฐเซ‡ i = 1 เช…เชจเซ‡ j = 2 เช เช–เชฐเซ‡เช–เชฐ i = 2 เช…เชจเซ‡ j = 1 เชธเชพเชฅเซ‡ เชธเชฐเช–เชพเชฎเชฃเซ€ เช•เชฐเชตเชพ เชœเซ‡เชตเซเช‚ เชœ เช›เซ‡, เชชเชฐเช‚เชคเซ เช† เช‰เช•เซ‡เชฒเชฎเชพเช‚ เช†เชชเชฃเซ‡ เชฌเช‚เชจเซ‡ เชตเชฟเช•เชฒเซเชชเซ‹ เช…เชœเชฎเชพเชตเซ€เช เช›เซ€เช).

เช•เชพเชฐเชฃ เช•เซ‡ เช…เชฎเชพเชฐเซเช‚ เชธเซ‹เชฒเซเชฏเซเชถเชจ เชฒเซ‚เชชเซเชธ เชฎเชพเชŸเซ‡ เชจเซ‡เชธเซเชŸเซ‡เชกเชจเซ€ เชœเซ‹เชกเซ€เชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡, เชคเซ‡ O(Nยฒ) เชธเชฎเชฏ เชœเชŸเชฟเชฒเชคเชพ เชธเชพเชฅเซ‡ เชšเชคเซเชฐเซเชญเซเชœ เช›เซ‡.


เช‰เช•เซ‡เชฒ 2: เชฌเชพเชˆเชจเชฐเซ€ เชถเซ‹เชง

เชธเชฎเชฏ เชœเชŸเชฟเชฒเชคเชพ: O(Nlog(N)).
เช…เชตเช•เชพเชถ เชœเชŸเชฟเชฒเชคเชพ: O(1)
.

เชเชฐเซ‡ เช“เชฐเซเชกเชฐ เช•เชฐเซ‡เชฒ เชนเซ‹เชตเชพเชฅเซ€, เช†เชชเชฃเซ‡ เชฌเชพเชˆเชจเชฐเซ€ เชถเซ‹เชงเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡ เช‰เช•เซ‡เชฒ เชถเซ‹เชงเซ€ เชถเช•เซ€เช เช›เซ€เช. เช“เชฐเซเชกเชฐ เช•เชฐเซ‡เชฒ เชเชฐเซ‡ เชฎเชพเชŸเซ‡ เช† เชธเซŒเชฅเซ€ เช•เชพเชฐเซเชฏเช•เซเชทเชฎ เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎ เช›เซ‡. เชฆเซเชตเชฟเชธเช‚เช—เซ€ เชถเซ‹เชงเชฎเชพเช‚ O(log(N)) เชจเซ‹ เชšเชพเชฒเชคเซ‹ เชธเชฎเชฏ เชนเซ‹เชฏ เช›เซ‡. เชœเซ‹ เช•เซ‡, เชคเชฎเชพเชฐเซ‡ เชนเชœเซ เชชเชฃ เช…เชจเซเชฏ เชคเชฎเชพเชฎ เชฎเซ‚เชฒเซเชฏเซ‹ เชธเชพเชฎเซ‡ เชฆเชฐเซ‡เช• เชคเชคเซเชตเชจเซ‡ เชคเชชเชพเชธเชตเชพ เชฎเชพเชŸเซ‡ เชฒเซ‚เชชเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡.

เช‰เช•เซ‡เชฒ เช•เซ‡เชตเซ‹ เชฆเซ‡เช–เชพเชˆ เชถเช•เซ‡ เชคเซ‡ เช…เชนเซ€เช‚ เช›เซ‡. เชตเชธเซเชคเซเช“ เชธเซเชชเชทเซเชŸ เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ เชฌเชพเชˆเชจเชฐเซ€ เชถเซ‹เชงเชจเซ‡ เชจเชฟเชฏเช‚เชคเซเชฐเชฟเชค เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡ เชเช• เช…เชฒเช— เช•เชพเชฐเซเชฏเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช เช›เซ€เช. เช…เชจเซ‡ removeIndex() เชซเช‚เช•เซเชถเชจ เชชเชฃ, เชœเซ‡ เช†เชชเซ‡เชฒ เช‡เชจเซเชกเซ‡เช•เซเชธเชจเซ‡ เชฌเชพเชฆ เช•เชฐเชคเชพ เชเชฐเซ‡เชจเซเช‚ เชตเชฐเซเชเชจ เชชเชฐเชค เช•เชฐเซ‡ เช›เซ‡.

const findSum = (arr, val) => {
  for (let i = 0; i < arr.length; i++){
    if (binarySearch(removeIndex(arr, i), val - arr[i])) {
      return true;
    }
  };
  return false;
};
 
const removeIndex = (arr, i) => {
  return arr.slice(0, i).concat(arr.slice(i + 1, arr.length));
};
 
const binarySearch = (arr, val) => {
  let start = 0;
  let end = arr.length - 1;
  let pivot = Math.floor(arr.length / 2); 
  while (start < end) {
    if (val < arr[pivot]) {
      end = pivot - 1;
    } else if (val > arr[pivot]) {
      start = pivot + 1;
    };
    pivot = Math.floor((start + end) / 2);
    if (arr[pivot] === val) {
      return true;
    }
  };
  return false;
};

เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพ [0] เชฅเซ€ เชถเชฐเซ‚ เชฅเชพเชฏ เช›เซ‡. เชคเซ‡ เชชเช›เซ€ เชชเซเชฐเชฅเชฎ เช…เชจเซเช•เซเชฐเชฎเชฃเชฟเช•เชพเชจเซ‡ เชฌเชพเชฆ เช•เชฐเชคเชพเช‚ เชเชฐเซ‡เชจเซเช‚ เชธเช‚เชธเซเช•เชฐเชฃ เชฌเชจเชพเชตเซ‡ เช›เซ‡ เช…เชจเซ‡ เช‡เชšเซเช›เชฟเชค เชฐเช•เชฎ เชฌเชจเชพเชตเชตเชพ เชฎเชพเชŸเซ‡ เชเชฐเซ‡เชฎเชพเช‚ เชฌเชพเช•เซ€เชจเชพ เช•เซ‹เชˆเชชเชฃ เชฎเซ‚เชฒเซเชฏเซ‹ เช‰เชฎเซ‡เชฐเซ€ เชถเช•เชพเชฏ เช›เซ‡ เช•เซ‡ เช•เซ‡เชฎ เชคเซ‡ เชœเซ‹เชตเชพ เชฎเชพเชŸเซ‡ เชฌเชพเชˆเชจเชฐเซ€ เชถเซ‹เชงเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ‡ เช›เซ‡. เช† เช•เซเชฐเชฟเชฏเชพ เชเชฐเซ‡เชฎเชพเช‚เชจเชพ เชฆเชฐเซ‡เช• เชคเชคเซเชต เชฎเชพเชŸเซ‡ เชเช•เชตเชพเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซ‡ เช›เซ‡.

เชซเซ‹เชฐ เชฒเซ‚เชชเชฎเชพเช‚ เชœ O(N) เชจเซ€ เชฐเซ‡เช–เซ€เชฏ เชธเชฎเชฏ เชœเชŸเชฟเชฒเชคเชพ เชนเชถเซ‡, เชชเชฐเช‚เชคเซ เชซเซ‹เชฐ เชฒเซ‚เชชเชจเซ€ เช…เช‚เชฆเชฐ เช†เชชเชฃเซ‡ เชฌเชพเชˆเชจเชฐเซ€ เชถเซ‹เชง เช•เชฐเซ€เช เช›เซ€เช, เชœเซ‡ O(Nlog(N)) เชจเซ€ เชเช•เช‚เชฆเชฐ เชธเชฎเชฏ เชœเชŸเชฟเชฒเชคเชพ เช†เชชเซ‡ เช›เซ‡. เช† เชธเซ‹เชฒเซเชฏเซเชถเชจ เชชเชพเช›เชฒเชพ เชเช• เช•เชฐเชคเชพ เชตเชงเซ เชธเชพเชฐเซเช‚ เช›เซ‡, เชชเชฐเช‚เชคเซ เชนเชœเซ เชชเชฃ เชธเซเชงเชพเชฐเชพ เชฎเชพเชŸเซ‡ เช…เชตเช•เชพเชถ เช›เซ‡.


เช‰เช•เซ‡เชฒ 3: เชฐเซ‡เช–เซ€เชฏ เชธเชฎเชฏ

เชธเชฎเชฏ เชœเชŸเชฟเชฒเชคเชพ: O(N).
เชœเช—เซเชฏเชพ เชœเชŸเชฟเชฒเชคเชพ: O(1).

เชนเชตเซ‡ เช†เชชเชฃเซ‡ เชธเชฎเชธเซเชฏเชพ เชนเชฒ เช•เชฐเซ€เชถเซเช‚, เชฏเชพเชฆ เชฐเชพเช–เซ€เชจเซ‡ เช•เซ‡ เชเชฐเซ‡ เชธเซ‰เชฐเซเชŸ เชฅเชฏเซ‡เชฒ เช›เซ‡. เช‰เช•เซ‡เชฒ เชฌเซ‡ เชจเช‚เชฌเชฐเซ‹ เชฒเซ‡เชตเชพเชจเซ‹ เช›เซ‡: เชเช• เชถเชฐเซ‚เช†เชคเชฎเชพเช‚ เช…เชจเซ‡ เชเช• เช…เช‚เชคเชฎเชพเช‚. เชœเซ‹ เชชเชฐเชฟเชฃเชพเชฎ เช†เชตเชถเซเชฏเช• เช•เชฐเชคเชพเช‚ เช…เชฒเช— เชนเซ‹เชฏ, เชคเซ‹ เชชเช›เซ€ เชชเซเชฐเชพเชฐเช‚เชญเชฟเช• เช…เชจเซ‡ เช…เช‚เชคเชฟเชฎ เชฌเชฟเช‚เชฆเซเช“ เชฌเชฆเชฒเซ‹.

เช†เช–เชฐเซ‡ เช†เชชเชฃเซ‡ เช•เชพเช‚ เชคเซ‹ เช‡เชšเซเช›เชฟเชค เชฎเซ‚เชฒเซเชฏเชจเซ‹ เชธเชพเชฎเชจเซ‹ เช•เชฐเซ€เชถเซเช‚ เช…เชจเซ‡ เชธเชพเชšเซเช‚ เชชเชฐเชค เช•เชฐเซ€เชถเซเช‚, เช…เชฅเชตเชพ เชถเชฐเซ‚เช†เชค เช…เชจเซ‡ เช…เช‚เชคเชฟเชฎ เชฌเชฟเช‚เชฆเซเช“ เชญเซ‡เช—เชพ เชฅเชถเซ‡ เช…เชจเซ‡ เช–เซ‹เชŸเชพ เชชเชพเช›เชพ เช†เชตเชถเซ‡.

const findSum = (arr, val) => {
  let start = 0;
  let end = arr.length - 1;
  while (start < end) {
    let sum = arr[start] + arr[end];
    if (sum > val) {
      end -= 1;
    } else if (sum < val) {
      start += 1;
    } else {
      return true;
    };
  };
  return false;
};


เชนเชตเซ‡ เชฌเชงเซเช‚ เชธเชพเชฐเซเช‚ เช›เซ‡, เช‰เช•เซ‡เชฒ เชถเซเชฐเซ‡เชทเซเช  เชฒเชพเช—เซ‡ เช›เซ‡. เชชเชฐเช‚เชคเซ เช•เซ‹เชฃ เชฌเชพเช‚เชนเซ‡เชงเชฐเซ€ เช†เชชเซ€ เชถเช•เซ‡ เช•เซ‡ เชเชฐเซ‡ เช“เชฐเซเชกเชฐ เช•เชฐเชตเชพเชฎเชพเช‚ เช†เชตเซเชฏเซ‹ เชนเชคเซ‹?

เชชเช›เซ€ เชถเซเช‚?

เชชเซเชฐเชฅเชฎ เชจเชœเชฐเชฎเชพเช‚, เช…เชฎเซ‡ เชชเซเชฐเชฅเชฎ เชเชฐเซ‡เชจเซ‡ เช“เชฐเซเชกเชฐ เช†เชชเซ€ เชถเช•เซเชฏเชพ เชนเซ‹เชค เช…เชจเซ‡ เชชเช›เซ€ เช‰เชชเชฐเชจเชพ เช‰เช•เซ‡เชฒเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซเชฏเซ‹ เชนเซ‹เชค. เชชเชฐเช‚เชคเซ เช† เช…เชฎเชฒเชจเชพ เชธเชฎเชฏเชจเซ‡ เช•เซ‡เชตเซ€ เชฐเซ€เชคเซ‡ เช…เชธเชฐ เช•เชฐเชถเซ‡?

เชถเซเชฐเซ‡เชทเซเช  เช…เชฒเซเช—เซ‹เชฐเชฟเชงเชฎ เชธเชฎเชฏ เชœเชŸเชฟเชฒเชคเชพ O (Nlog (N)) เชธเชพเชฅเซ‡ เช•เซเชตเชฟเช•เชธเซ‹เชฐเซเชŸ เช›เซ‡. เชœเซ‹ เช†เชชเชฃเซ‡ เชคเซ‡เชจเซ‹ เช…เชฎเชพเชฐเชพ เชถเซเชฐเซ‡เชทเซเช  เช‰เช•เซ‡เชฒเชฎเชพเช‚ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เช, เชคเซ‹ เชคเซ‡ เชคเซ‡เชจเชพ เชชเซเชฐเชฆเชฐเซเชถเชจเชจเซ‡ O(N) เชฅเซ€ O(Nlog(N)) เชฎเชพเช‚ เชฌเชฆเชฒเชถเซ‡. เชถเซเช‚ เชฌเชฟเชจเช•เซเชฐเชฎเชพเช‚เช•เชฟเชค เชเชฐเซ‡ เชธเชพเชฅเซ‡ เชฐเซ‡เช–เซ€เชฏ เช‰เช•เซ‡เชฒ เชถเซ‹เชงเชตเชพเชจเซเช‚ เชถเช•เซเชฏ เช›เซ‡?

4 เชธเซ‹เชฒเซเชฏเซเชถเชจ

เชธเชฎเชฏ เชœเชŸเชฟเชฒเชคเชพ: O(N).
เชœเช—เซเชฏเชพ เชœเชŸเชฟเชฒเชคเชพ: O(N).

เชนเชพ, เชเช• เชฒเซ€เชจเชฟเชฏเชฐ เชธเซ‹เชฒเซเชฏเซเชถเชจ เช›เซ‡; เช† เช•เชฐเชตเชพ เชฎเชพเชŸเซ‡, เช†เชชเชฃเซ‡ เชœเซ‡ เชฎเซ‡เชš เชถเซ‹เชงเซ€ เชฐเชนเซเชฏเชพ เช›เซ€เช เชคเซ‡เชจเซ€ เชฏเชพเชฆเซ€ เชงเชฐเชพเชตเชคเซ‹ เชจเชตเซ‹ เชเชฐเซ‡ เชฌเชจเชพเชตเชตเชพเชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡. เช…เชนเซ€เช‚ เชŸเซเชฐเซ‡เชก-เช“เชซ เชตเชงเซ เชฎเซ‡เชฎเชฐเซ€ เชตเชชเชฐเชพเชถ เช›เซ‡: เช•เชพเช—เชณเชฎเชพเช‚ O(1) เช•เชฐเชคเชพเช‚ เชตเชงเซ เชœเช—เซเชฏเชพ เชœเชŸเชฟเชฒเชคเชพ เชธเชพเชฅเซ‡ เชคเซ‡ เชเช•เชฎเชพเชคเซเชฐ เช‰เช•เซ‡เชฒ เช›เซ‡.

เชœเซ‹ เช†เชชเซ‡เชฒ เชเชฐเซ‡เชจเซ€ เชชเซเชฐเชฅเชฎ เช•เชฟเช‚เชฎเชค 1 เช›เซ‡ เช…เชจเซ‡ เชถเซ‹เชง เชฎเซ‚เชฒเซเชฏ 8 เช›เซ‡, เชคเซ‹ เช†เชชเชฃเซ‡ "เชถเซ‹เชง เชฎเซ‚เชฒเซเชฏเซ‹" เชเชฐเซ‡เชฎเชพเช‚ เชฎเซ‚เชฒเซเชฏ 7 เช‰เชฎเซ‡เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช.

เชชเช›เซ€, เชœเซ‡เชฎ เชœเซ‡เชฎ เช†เชชเชฃเซ‡ เชเชฐเซ‡เชจเชพ เชฆเชฐเซ‡เช• เช˜เชŸเช• เชชเชฐ เชชเซเชฐเช•เซเชฐเชฟเชฏเชพ เช•เชฐเซ€เช เช›เซ€เช, เชคเซ‡เชฎ เช†เชชเชฃเซ‡ "เชธเชฐเซเชš เชตเซ‡เชฒเซเชฏเซเช" เชจเซ€ เชเชฐเซ‡ เชคเชชเชพเชธเซ€ เชถเช•เซ€เช เช›เซ€เช เช…เชจเซ‡ เชœเซ‹เชˆ เชถเช•เซ€เช เช›เซ€เช เช•เซ‡ เชคเซ‡เชฎเชพเช‚เชฅเซ€ เชเช• เช†เชชเชฃเชพ เชฎเซ‚เชฒเซเชฏเชจเซ€ เชฌเชฐเชพเชฌเชฐ เช›เซ‡ เช•เซ‡ เชจเชนเซ€เช‚. เชœเซ‹ เชนเชพ, เชคเซ‹ เชธเชพเชšเซเช‚ เชชเชฐเชค เช•เชฐเซ‹.

const findSum = (arr, val) => {
  let searchValues = [val - arr[0]];
  for (let i = 1; i < arr.length; i++) {
    let searchVal = val - arr[i];
    if (searchValues.includes(arr[i])) {
      return true;
    } else {
      searchValues.push(searchVal);
    }
  };
  return false;
};

เชธเซ‹เชฒเซเชฏเซเชถเชจเชจเซ‹ เช†เชงเชพเชฐ เช เชซเซ‹เชฐ เชฒเซ‚เชช เช›เซ‡, เชœเซ‡ เช†เชชเชฃเซ‡ เช‰เชชเชฐ เชœเซ‹เชฏเซเช‚ เชคเซ‡เชฎ, O(N) เชจเซ€ เชฐเซ‡เช–เซ€เชฏ เชธเชฎเชฏ เชœเชŸเชฟเชฒเชคเชพ เชงเชฐเชพเชตเซ‡ เช›เซ‡.

เช…เชฎเชพเชฐเชพ เชซเช‚เช•เซเชถเชจเชจเซ‹ เชฌเซ€เชœเซ‹ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชญเชพเช— เช›เซ‡ Array.prototype.include(), เชเช• JavaScript เชชเชฆเซเชงเชคเชฟ เช•เซ‡ เชœเซ‡ เช…เชฐเซ‡ เช†เชชเซ‡เชฒ เชฎเซ‚เชฒเซเชฏ เชงเชฐเชพเชตเซ‡ เช›เซ‡ เชคเซ‡เชจเชพ เช†เชงเชพเชฐเซ‡ เชธเชพเชšเซเช‚ เช•เซ‡ เช–เซ‹เชŸเซเช‚ เชชเชฐเชค เช•เชฐเชถเซ‡.

Array.prototype.includes() เชจเซ€ เชธเชฎเชฏ เชœเชŸเชฟเชฒเชคเชพ เชœเชพเชฃเชตเชพ เชฎเชพเชŸเซ‡, เช…เชฎเซ‡ MDN (เช…เชจเซ‡ JavaScript เชฎเชพเช‚ เชฒเช–เชพเชฏเซ‡เชฒ) เชฆเซเชตเชพเชฐเชพ เชชเซเชฐเชฆเชพเชจ เช•เชฐเซ‡เชฒ เชชเซ‹เชฒเซ€เชซเชฟเชฒ เชœเซ‹เชˆ เชถเช•เซ€เช เช›เซ€เช เช…เชฅเชตเชพ Google V8 (C++) เชœเซ‡เชตเชพ JavaScript เชเชจเซเชœเชฟเชจเชจเชพ เชธเซเชคเซเชฐเซ‹เชค เช•เซ‹เชกเชฎเชพเช‚ เชชเชฆเซเชงเชคเชฟเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€ เชถเช•เซ€เช เช›เซ€เช.

// https://tc39.github.io/ecma262/#sec-array.prototype.includes
if (!Array.prototype.includes) {
  Object.defineProperty(Array.prototype, 'includes', {
    value: function(valueToFind, fromIndex) {
 
      if (this == null) {
        throw new TypeError('"this" is null or not defined');
      }
 
      // 1. Let O be ? ToObject(this value).
      var o = Object(this);
 
      // 2. Let len be ? ToLength(? Get(O, "length")).
      var len = o.length >>> 0;
 
      // 3. If len is 0, return false.
      if (len === 0) {
        return false;
      }
 
      // 4. Let n be ? ToInteger(fromIndex).
      //    (If fromIndex is undefined, this step produces the value 0.)
      var n = fromIndex | 0;
 
      // 5. If n โ‰ฅ 0, then
      //  a. Let k be n.
      // 6. Else n < 0,
      //  a. Let k be len + n.
      //  b. If k < 0, let k be 0.
      var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);
 
      function sameValueZero(x, y) {
        return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
      }
 
      // 7. Repeat, while k < len
      while (k < len) {
        // a. Let elementK be the result of ? Get(O, ! ToString(k)).
        // b. If SameValueZero(valueToFind, elementK) is true, return true.
        if (sameValueZero(o[k], valueToFind)) {
          return true;
        }
        // c. Increase k by 1.
        k++;
      }
 
      // 8. Return false
      return false;
    }
  });
}

เช…เชนเซ€เช‚ Array.prototype.include() เชจเซ‹ เชชเซเชจเชฐเชพเชตเชฐเซเชคเชฟเชค เชญเชพเช— เชธเซเชŸเซ‡เชช 7 เชฎเชพเช‚ เชœเซเชฏเชพเชฐเซ‡ เชฒเซ‚เชช เช›เซ‡ เชœเซ‡ (เชฒเช—เชญเช—) เช†เชชเซ‡เชฒ เชเชฐเซ‡เชจเซ€ เชธเชฎเช—เซเชฐ เชฒเช‚เชฌเชพเชˆเชจเซ‡ เชชเชพเชฐ เช•เชฐเซ‡ เช›เซ‡. เชฎเชคเชฒเชฌ เช•เซ‡ เชคเซ‡เชจเซ€ เชธเชฎเชฏเชจเซ€ เชœเชŸเชฟเชฒเชคเชพ เชชเชฃ เชฐเซ‡เช–เซ€เชฏ เช›เซ‡. เช เซ€เช• เช›เซ‡, เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ เชนเช‚เชฎเซ‡เชถเชพ เช…เชฎเชพเชฐเชพ เชฎเซเช–เซเชฏ เชเชฐเซ‡ เชชเชพเช›เชณ เชเช• เชชเช—เชฒเซเช‚ เช›เซ‡, เชธเชฎเชฏ เชœเชŸเชฟเชฒเชคเชพ O (N + (N - 1)) เช›เซ‡. Big O เชจเซ‹เชŸเซ‡เชถเชจเชจเซ‹ เช‰เชชเชฏเซ‹เช— เช•เชฐเซ€เชจเซ‡, เช…เชฎเซ‡ เชคเซ‡เชจเซ‡ O(N) เชฎเชพเช‚ เชธเชฐเชณ เชฌเชจเชพเชตเซ€เช เช›เซ€เช - เช•เชพเชฐเชฃ เช•เซ‡ เชคเซ‡ N เช›เซ‡ เชœเซ‡ เช‡เชจเชชเซเชŸ เช•เชฆเชฎเชพเช‚ เชตเชงเชพเชฐเซ‹ เช•เชฐเชคเซ€ เชตเช–เชคเซ‡ เชธเซŒเชฅเซ€ เชตเชงเซ เช…เชธเชฐ เช•เชฐเซ‡ เช›เซ‡.

เช…เชตเช•เชพเชถเซ€ เชœเชŸเชฟเชฒเชคเชพ เช…เช‚เช—เซ‡, เชตเชงเชพเชฐเชพเชจเซ€ เชเชฐเซ‡เชจเซ€ เชœเชฐเซ‚เชฐ เช›เซ‡ เชœเซ‡เชจเซ€ เชฒเช‚เชฌเชพเชˆ เชฎเซ‚เชณ เชเชฐเซ‡เชจเซ‡ เชชเซเชฐเชคเชฟเชฌเชฟเช‚เชฌเชฟเชค เช•เชฐเซ‡ เช›เซ‡ (เชฎเชพเชˆเชจเชธ เชตเชจ, เชนเชพ, เชชเชฐเช‚เชคเซ เชคเซ‡เชจเซ‡ เช…เชตเช—เชฃเซ€ เชถเช•เชพเชฏ เช›เซ‡), เชชเชฐเชฟเชฃเชพเชฎเซ‡ O(N) เช…เชตเช•เชพเชถเซ€ เชœเชŸเชฟเชฒเชคเชพ. เช เซ€เช• เช›เซ‡, เชฎเซ‡เชฎเชฐเซ€เชจเซ‹ เชตเชงเชพเชฐเซ‹ เชเชฒเซเช—เซ‹เชฐเชฟเชงเชฎเชจเซ€ เชฎเชนเชคเซเชคเชฎ เช•เชพเชฐเซเชฏเช•เซเชทเชฎเชคเชพเชจเซ‡ เชธเซเชจเชฟเชถเซเชšเชฟเชค เช•เชฐเซ‡ เช›เซ‡.


เชนเซเช‚ เช†เชถเชพ เชฐเชพเช–เซเช‚ เช›เซเช‚ เช•เซ‡ เชคเชฎเชจเซ‡ เชคเชฎเชพเชฐเชพ เชตเชฟเชกเชฟเช“ เช‡เชจเซเชŸเชฐเชตเซเชฏเซเชจเชพ เชชเซ‚เชฐเช• เชคเชฐเซ€เช•เซ‡ เชฒเซ‡เช– เช‰เชชเชฏเซ‹เช—เซ€ เชฒเชพเช—เชถเซ‡. เชคเซ‡ เชฌเชคเชพเชตเซ‡ เช›เซ‡ เช•เซ‡ เช‰เชชเชฏเซ‹เช—เชฎเชพเช‚ เชฒเซ‡เชตเชพเชคเชพ เชตเชฟเชตเชฟเชง เชธเช‚เชธเชพเชงเชจเซ‹ (เชธเชฎเชฏ, เชฎเซ‡เชฎเชฐเซ€) เชตเชกเซ‡ เชเช• เชธเชฐเชณ เชธเชฎเชธเซเชฏเชพเชจเซ‡ เชตเชฟเชตเชฟเชง เชฐเซ€เชคเซ‡ เช‰เช•เซ‡เชฒเซ€ เชถเช•เชพเชฏ เช›เซ‡.

เชธเซเช•เชฟเชฒเชฌเซ‹เช•เซเชธ เชญเชฒเชพเชฎเชฃ เช•เชฐเซ‡ เช›เซ‡:

เชธเซ‹เชฐเซเชธ: www.habr.com

เชเช• เชŸเชฟเชชเซเชชเชฃเซ€ เช‰เชฎเซ‡เชฐเซ‹