ืกืึทืœื•ื•ื™ื ื’ ืึท ืคึผืจืึธื‘ืœืขื ืคื•ืŸ ืึท Google ืื™ื ื˜ืขืจื•ื•ื™ื• ืื™ืŸ ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜: 4 ืคืึทืจืฉื™ื“ืขื ืข ื•ื•ืขื’ืŸ

ืกืึทืœื•ื•ื™ื ื’ ืึท ืคึผืจืึธื‘ืœืขื ืคื•ืŸ ืึท Google ืื™ื ื˜ืขืจื•ื•ื™ื• ืื™ืŸ ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜: 4 ืคืึทืจืฉื™ื“ืขื ืข ื•ื•ืขื’ืŸ

ื•ื•ืขืŸ ืื™ืš ื’ืขืœืขืจื ื˜ ื“ื™ ืคืึธืจืฉื˜ืขืœื•ื ื’ ืคื•ืŸ ืึทืœื’ืขืจื™ื“ืึทืžื–, ืื™ืš ื’ืขืคึฟื•ื ืขืŸ ื“ืขื ื“ืึธืก ืื™ื– ืึท ื•ื•ื™ื“ืขื ืคื•ืŸ ืึท Google ืžืึทืงื™ื ื’ ืื™ื ื˜ืขืจื•ื•ื™ื•.. ืขืก ื’ื™ื˜ ื ื™ื˜ ื‘ืœื•ื™ื– ืึท ื’ืขื“ืึทื ืง ืคื•ืŸ ื•ื•ื™ ื™ื ื˜ืขืจื•ื•ื™ื•ื– ื–ืขื ืขืŸ ื’ืขืคื™ืจื˜ ืื™ืŸ ื’ืจื•ื™ืก ื˜ืขื›ื ืึธืœืึธื’ื™ืข ืงืึธืจืคึผืขืจื™ื™ืฉืึทื ื–, ืึธื‘ืขืจ ืื•ื™ืš ืึทืœืึทื•ื– ืื™ืจ ืฆื• ืคึฟืึทืจืฉื˜ื™ื™ืŸ ื•ื•ื™ ื“ื™ ืึทืœื’ืขืจื™ื“ืึทื ืคึผืจืึธื‘ืœืขืžืก ื–ืขื ืขืŸ ืกืึทืœื•ื•ื“ ื•ื•ื™ ื™ืคื™ืฉืึทื ื˜ืœื™ ื•ื•ื™ ืžืขื’ืœืขืš.

ื“ืขืจ ืึทืจื˜ื™ืงืœ ืื™ื– ืึท ืžื™ืŸ ืคื•ืŸ ืึทืงืึทืžืคึผื ื™ืžืึทื ื˜ ืฆื• ื“ื™ ื•ื•ื™ื“ืขื. ืื™ืŸ ืขืก ืื™ืš ืฆื•ืฉื˜ืขืœืŸ ื‘ืึทืžืขืจืงื•ื ื’ืขืŸ ืื•ื™ืฃ ืึทืœืข ื“ื™ ืกืึทืœื•ืฉืึทื ื– ื’ืขื•ื•ื™ื–ืŸ, ืคึผืœื•ืก ืžื™ื™ืŸ ืื™ื™ื’ืขื ืข ื•ื•ืขืจืกื™ืข ืคื•ืŸ โ€‹โ€‹โ€‹โ€‹ื“ื™ ืœื™ื™ื–ื•ื ื’ ืื™ืŸ ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜. ื“ื™ ื ื•ืึทื ืกื™ื– ืคื•ืŸ ื™ืขื“ืขืจ ืึทืœื’ืขืจื™ื“ืึทื ื–ืขื ืขืŸ ืื•ื™ืš ื“ื™ืกืงืึทืกื˜.

ืžื™ืจ ื“ืขืจืžืึธื ืขืŸ ืื™ืจ: ืคึฟืึทืจ ืึทืœืข ืœื™ื™ืขื ืขืจ ืคื•ืŸ "ื”ื‘ืจ" - ืึท ืึทืจืึธืคึผืจืขื›ืขื ืขืŸ ืคื•ืŸ 10 ืจื•ื‘ืœ ื•ื•ืขืŸ ืื™ืจ ืคืึทืจืฉืจื™ื™ึทื‘ืŸ ืื™ืŸ ืงื™ื™ืŸ ืกืงื™ืœื‘ืึธืงืก ืงื•ืจืก ื ื™ืฆืŸ ื“ื™ ืคึผืขืจืžืึธื•ืฉืึทื ืึทืœ ืงืึธื“ "ื”ื‘ืจ".

Skillbox ืจืขืงืึทืžืขื ื“ื–: ืคึผืจืึทืงื˜ื™ืฉ ืงื•ืจืก "ืžืึธื‘ื™ืœ ื“ืขื•ื•ืขืœืึธืคึผืขืจ ืคึผืจืึธ".

ื•ื™ืกื–ืึธื’ื•ื ื’ ืคื•ืŸ ื“ื™ ืคึผืจืึธื‘ืœืขื

ืžื™ืจ ื‘ืึทืงื•ืžืขืŸ ืึท ืึธืจื“ืขืจื“ ืžืขื ื’ืข ืื•ืŸ ืึท ืกืคึผืขืฆื™ืคื™ืฉ ื•ื•ืขืจื˜. ืขืก ืื™ื– ื“ืขืจื™ื‘ืขืจ ื’ืขื‘ืขื˜ืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ืคึฟื•ื ืงืฆื™ืข ื•ื•ืึธืก ืงืขืจื˜ ืืžืช ืึธื“ืขืจ ืคืึทืœืฉ ื“ื™ืคึผืขื ื“ื™ื ื’ ืื•ื™ืฃ ืฆื™ ื“ื™ ืกืึทื›ืึทืงืœ ืคื•ืŸ ืงื™ื™ืŸ ืฆื•ื•ื™ื™ ื ื•ืžืขืจืŸ ืื™ืŸ ื“ื™ ืžืขื ื’ืข ืงืขื ืขืŸ ื’ืœื™ื™ึทืš ืึท ื’ืขื’ืขื‘ืŸ ื•ื•ืขืจื˜.

ืื™ืŸ ืื ื“ืขืจืข ื•ื•ืขืจื˜ืขืจ, ื–ืขื ืขืŸ ืขืก ืฆื•ื•ื™ื™ ื™ื ื˜ืึทื“ื–ืฉืขืจื– ืื™ืŸ ื“ื™ ืžืขื ื’ืข, x ืื•ืŸ y, ืึทื– ื•ื•ืขืŸ ืžื•ืกื™ืฃ ืฆื•ื–ืึทืžืขืŸ ื’ืœื™ื™ึทืš ื“ื™ ืกืคึผืขืกื™ืคื™ืขื“ ื•ื•ืขืจื˜?

ื‘ื™ื™ึทืฉืคึผื™ืœ ื

ืื•ื™ื‘ ืžื™ืจ ื–ืขื ืขืŸ ื’ืขื’ืขื‘ืŸ ืึท ืžืขื ื’ืข [1, 2, 4, 9] ืื•ืŸ ื“ื™ ื•ื•ืขืจื˜ ืื™ื– 8, ื“ื™ ืคึฟื•ื ืงืฆื™ืข ื•ื•ืขื˜ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืคืึทืœืฉ ื•ื•ื™ื™ึทืœ ืงื™ื™ืŸ ืฆื•ื•ื™ื™ ื ื•ืžืขืจืŸ ืื™ืŸ ื“ื™ ืžืขื ื’ืข ืงืขื ืขืŸ ืœื™ื™ื’ืŸ ืึทืจื•ื™ืฃ ืฆื• 8.

ื‘ื™ื™ึทืฉืคึผื™ืœ ื‘

ืื‘ืขืจ ืื•ื™ื‘ ืขืก ืื™ื– ืึท ืžืขื ื’ืข [1, 2, 4, 4] ืื•ืŸ ื“ื™ ื•ื•ืขืจื˜ ืื™ื– 8, ื“ื™ ืคึฟื•ื ืงืฆื™ืข ื–ืึธืœ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืืžืช ื•ื•ื™ื™ึทืœ 4 + 4 = 8.

ืœื™ื™ื–ื•ื ื’ 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;
};

ื“ื™ ืœื™ื™ื–ื•ื ื’ ืื™ื– ื ื™ืฉื˜ ืขืคืขืงื˜ื™ื•ื• ื•ื•ื™ื™ึทืœ ืขืก ื˜ืฉืขืงืก ื™ืขื“ืขืจ ืžืขื’ืœืขืš ืกืึทื›ืึทืงืœ ืคื•ืŸ ืฆื•ื•ื™ื™ ืขืœืขืžืขื ื˜ืŸ ืื™ืŸ ื“ื™ ืžืขื ื’ืข ืื•ืŸ ืื•ื™ืš ืงืึทืžืคึผืขืจื– ื™ืขื“ืขืจ ืคึผืึธืจ ืคื•ืŸ ื™ื ื“ื™ืกืขืก ืฆื•ื•ื™ื™ ืžืึธืœ. (ืœืžืฉืœ, ื•ื•ืขืŸ ืื™ืš = 1 ืื•ืŸ ื“ื–ืฉ = 2 ืื™ื– ืคืืงื˜ื™ืฉ ื“ื™ ื–ืขืœื‘ืข ื•ื•ื™ ืงืึทืžืคึผืขืจื™ื ื’ ืžื™ื˜ i = 2 ืื•ืŸ ื“ื–ืฉ = 1, ืึธื‘ืขืจ ืื™ืŸ ื“ืขื ืœื™ื™ื–ื•ื ื’ ืžื™ืจ ืคึผืจื•ื‘ื™ืจืŸ ื‘ื™ื™ื“ืข ืึธืคึผืฆื™ืขืก).

ื•ื•ื™ื™ึทืœ ืื•ื ื“ื–ืขืจ ืœื™ื™ื–ื•ื ื’ ื ื™ืฆื˜ ืึท ืคึผืึธืจ ืคื•ืŸ ื ืขืกื˜ืขื“ ืคึฟืึทืจ ืœื•ืคึผืก, ืขืก ืื™ื– ืงื•ื•ืึทื“ืจืึทื˜ื™ืง ืžื™ื˜ O (Nยฒ) ืฆื™ื™ื˜ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™.


ืœื™ื™ื–ื•ื ื’ 2: ื‘ื™ื™ื ืขืจื™ ื–ื•ื›ืŸ

ืฆื™ื™ื˜ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™: O(Nlog(N)).
ืคึผืœืึทืฅ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™: ืึธ (1)
.

ื–ื™ื ื˜ ื“ื™ ืขืจื™ื™ื– ื–ืขื ืขืŸ ืึธืจื“ืขืจื“, ืžื™ืจ ืงืขื ืขืŸ ื–ื•ื›ืŸ ืคึฟืึทืจ ืึท ืœื™ื™ื–ื•ื ื’ ื ื™ืฆืŸ ื‘ื™ื™ื ืขืจื™ ื–ื•ื›ืŸ. ื“ืึธืก ืื™ื– ื“ื™ ืžืขืจืกื˜ ืขืคืขืงื˜ื™ื•ื• ืึทืœื’ืขืจื™ื“ืึทื ืคึฟืึทืจ ืึธืจื“ืขืจื“ ืขืจื™ื™ื–. ื‘ื™ื™ื ืขืจื™ ื–ื•ื›ืŸ ื–ื™ืš ื”ืื˜ ืึท ืคืœื™ืกื ื“ื™ืง ืฆื™ื™ื˜ ืคื•ืŸ ืึธ (ืœืึธื’ (ืขืŸ)). ืึธื‘ืขืจ, ืื™ืจ ื ืึธืš ื“ืึทืจืคึฟืŸ ืฆื• ื ื•ืฆืŸ ืึท ืคึฟืึทืจ ืฉืœื™ื™ืฃ ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื™ืขื“ืขืจ ืขืœืขืžืขื ื˜ ืงืขื’ืŸ ืึทืœืข ืื ื“ืขืจืข ื•ื•ืึทืœื•ืขืก.

ื“ืึธ ืก ื•ื•ืึธืก ืึท ืœื™ื™ื–ื•ื ื’ ื–ืืœ ืงื•ืงืŸ ื•ื•ื™. ืฆื• ืžืึทื›ืŸ ื“ื™ ื˜ื™ื ื’ื– ืงืœืึธืจ, ืžื™ืจ ื ื•ืฆืŸ ืึท ื‘ืึทื–ื•ื ื“ืขืจ ืคื•ื ืงืฆื™ืข ืฆื• ืงืึธื ื˜ืจืึธืœื™ืจืŸ ื‘ื™ื™ื ืขืจื™ ื–ื•ื›ืŸ. ืื•ืŸ ืื•ื™ืš ื“ื™ 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: ืœื™ื ืขืึทืจ ืฆื™ื™ื˜

ืฆื™ื™ื˜ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™: ืึธ(ืขืŸ).
ืคึผืœืึทืฅ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™: ืึธ (ืงืกื ื•ืžืงืก).

ืื™ืฆื˜ ืžื™ืจ ื•ื•ืขืœืŸ ืกืึธืœื•ื•ืข ื“ื™ ืคึผืจืึธื‘ืœืขื, ื’ืขื“ืขื ืงืขืŸ ืึทื– ื“ื™ ืžืขื ื’ืข ืื™ื– ืื•ื™ืกื’ืขืฉื˜ืขืœื˜. ื“ื™ ืœื™ื™ื–ื•ื ื’ ืื™ื– ืฆื• ื ืขืžืขืŸ ืฆื•ื•ื™ื™ ื ื•ืžืขืจืŸ: ืื™ื™ื ืขืจ ืื™ืŸ ื“ื™ ืึธื ื”ื™ื™ื‘ ืื•ืŸ ืื™ื™ื ืขืจ ืื™ืŸ ื“ื™ ืกื•ืฃ. ืื•ื™ื‘ ื“ืขืจ ืจืขื–ื•ืœื˜ืึทื˜ ืื™ื– ืึทื ื“ืขืจืฉ ืคื•ืŸ ื“ื™ ืคืืจืœืื ื’ื˜, ื˜ื•ื™ืฉืŸ ื“ื™ ืกื˜ืึทืจื˜ื™ื ื’ ืื•ืŸ ืกืึธืฃ ืคื•ื ืงื˜ืŸ.

ื™ื•ื•ืขื ื˜ืฉืึทื•ื•ืึทืœื™ ืžื™ืจ ื•ื•ืขืœืŸ ืึธื“ืขืจ ื˜ืจืขืคืŸ ื“ื™ ื’ืขื‘ืขื˜ืŸ ื•ื•ืขืจื˜ ืื•ืŸ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืืžืช, ืึธื“ืขืจ ื“ื™ ืึธื ื”ื™ื™ื‘ ืื•ืŸ ืกื•ืฃ ืคื•ื ืงื˜ืŸ ื•ื•ืขืœืŸ ืงืึทื ื•ื•ืขืจื“ื–ืฉ ืื•ืŸ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืคืึทืœืฉ.

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


ืื™ืฆื˜ ืึทืœืฅ ืื™ื– ื’ื•ื˜, ื“ื™ ืœื™ื™ื–ื•ื ื’ ืžื™ื™ื ื˜ ืฆื• ื–ื™ื™ืŸ ืึธืคึผื˜ื™ืžืึทืœ. ืื‘ืขืจ ื•ื•ืขืจ ืงืขื ืขืŸ ื’ืึทืจืึทื ื˜ื™ืจืŸ ืึทื– ื“ื™ ืžืขื ื’ืข ืื™ื– ืึธืจื“ืขืจื“?

ื•ื•ืืก ื“ืขืŸ?

ืื™ืŸ ืขืจืฉื˜ืขืจ ื‘ืœื™ืง, ืžื™ืจ ืงืขืŸ ื”ืึธื‘ืŸ ืคืฉื•ื˜ ืึธืจื“ืขืจื“ ื“ื™ ืžืขื ื’ืข ืขืจืฉื˜ืขืจ ืื•ืŸ ื“ืขืจื ืึธืš ื’ืขื•ื•ื™ื™ื ื˜ ื“ื™ ืœื™ื™ื–ื•ื ื’ ืื•ื™ื‘ืŸ. ืึธื‘ืขืจ ื•ื•ื™ ื•ื•ืขื˜ ื“ืึธืก ื•ื•ื™ืจืงืŸ ื“ื™ ื“ื•ืจื›ืคื™ืจื•ื ื’ ืฆื™ื™ื˜?

ื“ืขืจ ื‘ืขืกื˜ืขืจ ืึทืœื’ืขืจื™ื“ืึทื ืื™ื– ืงื•ื•ื™ืงืกืึธืจื˜ ืžื™ื˜ ืฆื™ื™ื˜ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™ ืึธ (Nlog (N)). ืื•ื™ื‘ ืžื™ืจ ื ื•ืฆืŸ ืขืก ืื™ืŸ ืื•ื ื“ื–ืขืจ ืึธืคึผื˜ื™ืžืึทืœ ืœื™ื™ื–ื•ื ื’, ืขืก ื•ื•ืขื˜ ื˜ื•ื™ืฉืŸ ื–ื™ื™ึทืŸ ืคืึธืจืฉื˜ืขืœื•ื ื’ ืคื•ืŸ O(N) ืฆื• O(Nlog(N)). ืื™ื– ืขืก ืžืขื’ืœืขืš ืฆื• ื’ืขืคึฟื™ื ืขืŸ ืึท ืœื™ื ืขืึทืจ ืœื™ื™ื–ื•ื ื’ ืžื™ื˜ ืึท ืึทื ืึธืจื“ืขืจื“ ืžืขื ื’ืข?

ืœื™ื™ื–ื•ื ื’ 4

ืฆื™ื™ื˜ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™: ืึธ(ืขืŸ).
ืคึผืœืึทืฅ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™: ืึธ (ืขืŸ).

ื™ืึธ, ืขืก ืื™ื– ืึท ืœื™ื ืขืึทืจ ืœื™ื™ื–ื•ื ื’; ืฆื• ื˜ืึธืŸ ื“ืึธืก, ืžื™ืจ ื“ืึทืจืคึฟืŸ ืฆื• ืฉืึทืคึฟืŸ ืึท ื ื™ื™ึทืข ืžืขื ื’ืข ืžื™ื˜ ื“ื™ ืจืฉื™ืžื” ืคื•ืŸ ืฉื•ื•ืขื‘ืขืœืขืš ื•ื•ืึธืก ืžื™ืจ ื–ืขื ืขืŸ ืงื•ืงืŸ ืคึฟืึทืจ. ื“ื™ ื”ืึทื ื“ืœ-ืึทื•ื•ืขืง ื“ืึธ ืื™ื– ืžืขืจ ื–ื›ึผืจื•ืŸ ื‘ืึทื ื™ืฅ: ื“ืึธืก ืื™ื– ื“ืขืจ ื‘ืœื•ื™ื– ืœื™ื™ื–ื•ื ื’ ืื™ืŸ ื“ื™ ืคึผืึทืคึผื™ืจ ืžื™ื˜ ืคึผืœืึทืฅ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™ ื’ืจืขืกืขืจ ื•ื•ื™ ืึธ (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 (), ืึท ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜ ืื•ืคึฟืŸ ื•ื•ืึธืก ื•ื•ืขื˜ ืฆื•ืจื™ืงืงื•ืžืขืŸ ืืžืช ืึธื“ืขืจ ืคืึทืœืฉ ื“ื™ืคึผืขื ื“ื™ื ื’ ืื•ื™ืฃ ืฆื™ ื“ื™ ืžืขื ื’ืข ื›ึผื•ืœืœ ื“ื™ ื’ืขื’ืขื‘ืŸ ื•ื•ืขืจื˜.

ืฆื• ืจืขื›ืขื ืขืŸ ื“ื™ ืฆื™ื™ื˜ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™ ืคื•ืŸ Array.prototype.includes(), ืžื™ืจ ืงืขื ืขืŸ ืงื•ืงืŸ ืื™ืŸ ื“ื™ ืคึผืึธืœื™ืคื™ืœืœ ืฆื•ื’ืขืฉื˜ืขืœื˜ ื“ื•ืจืš MDN (ืื•ืŸ ื’ืขืฉืจื™ื‘ืŸ ืื™ืŸ ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜) ืึธื“ืขืจ ื ื•ืฆืŸ ืึท ืžืขื˜ืึธื“ ืื™ืŸ ื“ื™ ืžืงื•ืจ ืงืึธื“ ืคื•ืŸ ืึท ื“ื–ืฉืึทื•ื•ืึทืกืงืจื™ืคึผื˜ ืžืึธื˜ืึธืจ ืึทื–ืึท ื•ื•ื™ Google V8 (C ++).

// 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 ื•ื•ืึธืก (ื›ึผืžืขื˜) ื˜ืจืึทื•ื•ืขืจืกื– ื“ื™ ื’ืื ืฆืข ืœืขื ื’ ืคื•ืŸ ื“ื™ ื’ืขื’ืขื‘ืŸ ืžืขื ื’ืข. ื“ืขื ืžื™ื˜ืœ ืึทื– ื–ื™ื™ึทืŸ ืฆื™ื™ื˜ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™ ืื™ื– ืื•ื™ืš ืœื™ื ืขืึทืจ. ื ื•, ื–ื™ื ื˜ ืขืก ืื™ื– ืฉื˜ืขื ื“ื™ืง ืื™ื™ืŸ ืฉืจื™ื˜ ื”ื™ื ื˜ืขืจ ืื•ื ื“ื–ืขืจ ื”ื•ื™ืคึผื˜ ืžืขื ื’ืข, ื“ื™ ืฆื™ื™ื˜ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™ ืื™ื– ืึธ (N + (N - 1)). ื ื™ืฆืŸ ื‘ื™ื’ ืึธ ื ืึธื˜ืึทื˜ื™ืึธืŸ, ืžื™ืจ ืคืึทืจืคึผืึธืฉืขื˜ืขืจืŸ ืขืก ืฆื• O (N) - ื•ื•ื™ื™ึทืœ ืขืก ืื™ื– N ื•ื•ืึธืก ื”ืื˜ ื“ื™ ื’ืจืขืกื˜ืข ืคึผืจืึทืœ ื•ื•ืขืŸ ื™ื ืงืจื™ืกื™ื ื’ ื“ื™ ืึทืจื™ื™ึทื ืฉืจื™ื™ึทื‘ ื’ืจื™ื™ืก.

ื•ื•ืขื’ืŸ ืกืคึผื™ื™ืฉืึทืœ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™, ืึทืŸ ื ืึธืš ืžืขื ื’ืข ืื™ื– ื“ืืจืฃ ื•ื•ืขืžืขื ืก ืœืขื ื’ ืžื™ืจืขืจื– ื“ื™ ืึธืจื™ื’ื™ื ืขืœ ืžืขื ื’ืข (ืžื™ื ื•ืก ืื™ื™ื ืขืจ, ื™ืึธ, ืึธื‘ืขืจ ื“ืึธืก ืงืขื ืขืŸ ื–ื™ื™ืŸ ืื™ื’ื ืึธืจื™ืจื˜), ืจื™ื–ืึทืœื˜ื™ื ื’ ืื™ืŸ O (N) ืกืคึผื™ื™ืฉืึทืœ ืงืึทืžืคึผืœืขืงืกื™ื˜ื™. ื ื•, ื’ืขื•ื•ืืงืกืŸ ื–ื›ึผืจื•ืŸ ื‘ืึทื ื™ืฅ ื™ื ืฉื•ืจื– ืžืึทืงืกื™ืžื•ื ืขืคืขืงื˜ื™ื•ื•ืงื™ื™ึทื˜ ืคื•ืŸ ื“ื™ ืึทืœื’ืขืจื™ื“ืึทื.


ืื™ืš ื”ืึธืคึฟืŸ ืื™ืจ ื’ืขืคึฟื™ื ืขืŸ ื“ืขื ืึทืจื˜ื™ืงืœ ื ื•ืฆื™ืง ื•ื•ื™ ืึท ื”ืขืกืึธืคืข ืฆื• ื“ื™ื™ืŸ ื•ื•ื™ื“ืขื ืื™ื ื˜ืขืจื•ื•ื™ื•. ืขืก ื•ื•ื™ื™ื–ื˜ ืึทื– ืึท ืคึผืฉื•ื˜ ืคึผืจืึธื‘ืœืขื ืงืขื ืขืŸ ื–ื™ื™ืŸ ืกืึทืœื•ื•ื“ ืื™ืŸ ืขื˜ืœืขื›ืข ืคืึทืจืฉื™ื“ืขื ืข ื•ื•ืขื’ืŸ ืžื™ื˜ ืคืึทืจืฉื™ื“ืขื ืข ืึทืžืึทื•ื ืฅ ืคื•ืŸ ืจืขืกื•ืจืกืŸ ื’ืขื ื™ืฆื˜ (ืฆื™ื™ื˜, ื–ื›ึผืจื•ืŸ).

Skillbox ืจืขืงืึทืžืขื ื“ื–:

ืžืงื•ืจ: www.habr.com

ืœื™ื™ื’ืŸ ืึท ื‘ืึทืžืขืจืงื•ื ื’