āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡ āĻāĻ•āϟāĻŋ āϗ⧁āĻ—āϞ āχāĻ¨ā§āϟāĻžāϰāĻ­āĻŋāω āĻĨ⧇āϕ⧇ āϏāĻŽāĻ¸ā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž: 4āϟāĻŋ āĻ­āĻŋāĻ¨ā§āύ āωāĻĒāĻžāϝāĻŧ

āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡ āĻāĻ•āϟāĻŋ āϗ⧁āĻ—āϞ āχāĻ¨ā§āϟāĻžāϰāĻ­āĻŋāω āĻĨ⧇āϕ⧇ āϏāĻŽāĻ¸ā§āϝāĻž āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž: 4āϟāĻŋ āĻ­āĻŋāĻ¨ā§āύ āωāĻĒāĻžāϝāĻŧ

āϝāĻ–āύ āφāĻŽāĻŋ āĻ…ā§āϝāĻžāϞāĻ—āϰāĻŋāĻĻāĻŽā§‡āϰ āĻ•āĻ°ā§āĻŽāĻ•ā§āώāĻŽāϤāĻž āĻ…āĻ§ā§āϝāϝāĻŧāύ āĻ•āϰāĻ›āĻŋāϞāĻžāĻŽ, āϤāĻ–āύ āφāĻŽāĻŋ āĻāϟāĻŋ āϜ⧁āĻĄāĻŧ⧇ āĻāϏ⧇āĻ›āĻŋ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ āϗ⧁āĻ—āϞ āĻŽāĻ• āϏāĻžāĻ•ā§āώāĻžā§ŽāĻ•āĻžāϰ⧇āϰ āĻāĻ•āϟāĻŋ āĻ­āĻŋāĻĄāĻŋāĻ“āĨ¤. āĻāϟāĻŋ āϕ⧇āĻŦāϞ āĻŦāĻĄāĻŧ āĻĒā§āϰāϝ⧁āĻ•ā§āϤāĻŋ āĻ•āĻ°ā§āĻĒā§‹āϰ⧇āĻļāύāϗ⧁āϞāĻŋāϤ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āϏāĻžāĻ•ā§āώāĻžāĻ¤ā§āĻ•āĻžāϰ āύ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧ āϤāĻžāϰ āĻāĻ•āϟāĻŋ āϧāĻžāϰāĻŖāĻž āĻĻ⧇āϝāĻŧ āύāĻž, āϤāĻŦ⧇ āφāĻĒāύāĻžāϕ⧇ āϕ⧀āĻ­āĻžāĻŦ⧇ āĻ…ā§āϝāĻžāϞāĻ—āϰāĻŋāĻĻāĻŽāĻŋāĻ• āϏāĻŽāĻ¸ā§āϝāĻžāϗ⧁āϞāĻŋ āϝāϤāϟāĻž āϏāĻŽā§āĻ­āĻŦ āĻĻāĻ•ā§āώāϤāĻžāϰ āϏāĻžāĻĨ⧇ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž āĻšāϝāĻŧ āϤāĻž āĻŦā§‹āĻāĻžāϰ āĻ…āύ⧁āĻŽāϤāĻŋ āĻĻ⧇āϝāĻŧāĨ¤

āĻāχ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āĻ­āĻŋāĻĄāĻŋāĻ“āϟāĻŋāϰ āĻāĻ• āϧāϰāϪ⧇āϰ āĻ…āύ⧁āώāĻ™ā§āĻ—āĨ¤ āĻāϟāĻŋāϤ⧇ āφāĻŽāĻŋ āĻĻ⧇āĻ–āĻžāύ⧋ āϏāĻŽāĻ¸ā§āϤ āϏāĻŽāĻžāϧāĻžāύ⧇āϰ āωāĻĒāϰ āĻŽāĻ¨ā§āϤāĻŦā§āϝ āĻĒā§āϰāĻĻāĻžāύ āĻ•āϰāĻŋ, āĻāĻŦāĻ‚ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡ āϏāĻŽāĻžāϧāĻžāύ⧇āϰ āφāĻŽāĻžāϰ āύāĻŋāϜāĻ¸ā§āĻŦ āϏāĻ‚āĻ¸ā§āĻ•āϰāĻŖāĨ¤ āĻĒā§āϰāϤāĻŋāϟāĻŋ āĻ…ā§āϝāĻžāϞāĻ—āϰāĻŋāĻĻāĻŽā§‡āϰ āϏ⧂āĻ•ā§āĻˇā§āĻŽāϤāĻžāĻ“ āφāϞ⧋āϚāύāĻž āĻ•āϰāĻž āĻšāϝāĻŧ⧇āϛ⧇āĨ¤

āφāĻŽāϰāĻž āĻŽāύ⧇ āĻ•āϰāĻŋāϝāĻŧ⧇ āĻĻāĻŋāĻšā§āĻ›āĻŋ: "Habr"-āĻāϰ āϏāĻ•āϞ āĻĒāĻžāĻ āĻ•āĻĻ⧇āϰ āϜāĻ¨ā§āϝ - "Habr" āĻĒā§āϰāϚāĻžāϰāĻŽā§‚āϞāĻ• āϕ⧋āĻĄ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇ āϝ⧇āϕ⧋āύ⧋ Skillbox āϕ⧋āĻ°ā§āϏ⧇ āύāĻĨāĻŋāϭ⧁āĻ•ā§āϤ āĻ•āϰāĻžāϰ āϏāĻŽāϝāĻŧ 10 āϰ⧁āĻŦ⧇āϞ āĻ›āĻžāĻĄāĻŧāĨ¤

Skillbox āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻ•āϰ⧇: āĻŦā§āϝāĻŦāĻšāĻžāϰāĻŋāĻ• āϕ⧋āĻ°ā§āϏ "āĻŽā§‹āĻŦāĻžāχāϞ āĻĄā§‡āϭ⧇āϞāĻĒāĻžāϰ āĻĒā§āϰ⧋".

āϏāĻŽāĻ¸ā§āϝāĻž āĻ—āĻ āύ

āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻ…āĻ°ā§āĻĄāĻžāϰāĻ•ā§ƒāϤ āĻ…ā§āϝāĻžāϰ⧇ āĻāĻŦāĻ‚ āĻāĻ•āϟāĻŋ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŽāĻžāύ āĻĻ⧇āĻ“āϝāĻŧāĻž āĻšāϝāĻŧāĨ¤ āϤāĻžāϰāĻĒāϰ⧇ āĻāϟāĻŋāϕ⧇ āĻāĻ•āϟāĻŋ āĻĢāĻžāĻ‚āĻļāύ āϤ⧈āϰāĻŋ āĻ•āϰāϤ⧇ āĻŦāϞāĻž āĻšāϝāĻŧ āϝāĻž āϏāĻ¤ā§āϝ āĻŦāĻž āĻŽāĻŋāĻĨā§āϝāĻž āĻĢ⧇āϰāϤ āĻĻ⧇āϝāĻŧ āĻ…ā§āϝāĻžāϰ⧇āϰ āϝ⧇āϕ⧋āύ⧋ āĻĻ⧁āϟāĻŋ āϏāĻ‚āĻ–ā§āϝāĻžāϰ āϝ⧋āĻ—āĻĢāϞ āĻāĻ•āϟāĻŋ āĻĒā§āϰāĻĻāĻ¤ā§āϤ āĻŽāĻžāύ⧇āϰ āϏāĻŽāĻžāύ āĻšāϤ⧇ āĻĒāĻžāϰ⧇ āĻ•āĻŋāύāĻž āϤāĻžāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇āĨ¤

āĻ…āĻ¨ā§āϝ āĻ•āĻĨāĻžāϝāĻŧ, āĻ…ā§āϝāĻžāϰ⧇āϤ⧇ āĻ•āĻŋ āĻĻ⧁āϟāĻŋ āĻĒā§‚āĻ°ā§āĻŖāϏāĻ‚āĻ–ā§āϝāĻž āφāϛ⧇, x āĻāĻŦāĻ‚ y, āϝ⧇āϗ⧁āϞāĻŋ āĻāĻ•āϏāĻžāĻĨ⧇ āϝ⧋āĻ— āĻ•āϰāϞ⧇ āύāĻŋāĻ°ā§āĻĻāĻŋāĻˇā§āϟ āĻŽāĻžāύ āϏāĻŽāĻžāύ āĻšāϝāĻŧ?

āωāĻĻāĻžāĻšāϰāĻŖ A

āϝāĻĻāĻŋ āφāĻŽāĻžāĻĻ⧇āϰ āĻāĻ•āϟāĻŋ āĻ…ā§āϝāĻžāϰ⧇ [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)) āĻ āĻĒāϰāĻŋāĻŦāĻ°ā§āϤāύ āĻ•āϰāĻŦ⧇āĨ¤ āĻāϟāĻŋ āĻāĻ•āϟāĻŋ unordered āĻ…ā§āϝāĻžāϰ⧇āϰ āϏāĻ™ā§āϗ⧇ āĻāĻ•āϟāĻŋ āϰ⧈āĻ–āĻŋāĻ• āϏāĻŽāĻžāϧāĻžāύ āϖ⧁āρāĻœā§‡ āĻŦ⧇āϰ āĻ•āϰāĻž āϏāĻŽā§āĻ­āĻŦ?

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(), āĻāĻ•āϟāĻŋ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āϟ āĻĒāĻĻā§āϧāϤāĻŋ āϝāĻž āϏāĻ¤ā§āϝ āĻŦāĻž āĻŽāĻŋāĻĨā§āϝāĻž āĻĢ⧇āϰāϤ āĻĻ⧇āĻŦ⧇ āϤāĻžāϰ āωāĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇ āϝ⧇ āĻ…ā§āϝāĻžāϰ⧇ āĻĒā§āϰāĻĻāĻ¤ā§āϤ āĻŽāĻžāύ āϰāϝāĻŧ⧇āϛ⧇āĨ¤

Array.prototype.includes() āĻāϰ āϏāĻŽāϝāĻŧ āϜāϟāĻŋāϞāϤāĻž āĻŦ⧇āϰ āĻ•āϰāĻžāϰ āϜāĻ¨ā§āϝ, āφāĻŽāϰāĻž MDN āĻĻā§āĻŦāĻžāϰāĻž āĻĒā§āϰāĻĻāĻ¤ā§āϤ āĻĒāϞāĻŋāĻĢāĻŋāϞ āĻĻ⧇āĻ–āϤ⧇ āĻĒāĻžāϰāĻŋ (āĻāĻŦāĻ‚ āϜāĻžāĻ­āĻžāĻ¸ā§āĻ•ā§āϰāĻŋāĻĒā§āĻŸā§‡ āϞ⧇āĻ–āĻž) āĻ…āĻĨāĻŦāĻž āĻāĻ•āϟāĻŋ JavaScript āχāĻžā§āϜāĻŋāύ⧇āϰ āϏ⧋āĻ°ā§āϏ āϕ⧋āĻĄ āϝ⧇āĻŽāύ 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-āĻ while āϞ⧁āĻĒ āϝāĻž (āĻĒā§āϰāĻžāϝāĻŧ) āĻĒā§āϰāĻĻāĻ¤ā§āϤ āĻ…ā§āϝāĻžāϰ⧇āϰ āĻĒ⧁āϰ⧋ āĻĻ⧈āĻ°ā§āĻ˜ā§āϝ āĻ…āϤāĻŋāĻ•ā§āϰāĻŽ āĻ•āϰ⧇āĨ¤ āĻāϰ āĻŽāĻžāύ⧇ āĻšāϞ āĻāϰ āϏāĻŽāϝāĻŧ āϜāϟāĻŋāϞāϤāĻžāĻ“ āϰ⧈āĻ–āĻŋāĻ•āĨ¤ āĻ āĻŋāĻ• āφāϛ⧇, āϝ⧇āĻšā§‡āϤ⧁ āĻāϟāĻŋ āϏāĻŦāϏāĻŽāϝāĻŧ āφāĻŽāĻžāĻĻ⧇āϰ āĻĒā§āϰāϧāĻžāύ āĻ…ā§āϝāĻžāϰ⧇āϰ āĻāĻ• āϧāĻžāĻĒ āĻĒāĻŋāĻ›āύ⧇ āĻĨāĻžāϕ⧇, āϤāĻžāχ āϏāĻŽāϝāĻŧ⧇āϰ āϜāϟāĻŋāϞāϤāĻž āĻšāϞ O (N + (N - 1))āĨ¤ āĻŦāĻŋāĻ— āĻ“ āύ⧋āĻŸā§‡āĻļāύ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ•āϰ⧇, āφāĻŽāϰāĻž āĻāϟāĻŋāϕ⧇ O(N)-āϤ⧇ āϏāϰāϞ āĻ•āϰāĻŋ - āĻ•āĻžāϰāĻŖ āχāύāĻĒ⧁āϟ āφāĻ•āĻžāϰ āĻŦāĻžāĻĄāĻŧāĻžāύ⧋āϰ āϏāĻŽāϝāĻŧ āĻāϟāĻŋ N āĻāϰ āϏāĻŦāĻšā§‡āϝāĻŧ⧇ āĻŦ⧇āĻļāĻŋ āĻĒā§āϰāĻ­āĻžāĻŦ āĻĒāĻĄāĻŧ⧇āĨ¤

āĻ¸ā§āĻĨāĻžāύāĻŋāĻ• āϜāϟāĻŋāϞāϤāĻž āϏāĻŽā§āĻĒāĻ°ā§āϕ⧇, āĻāĻ•āϟāĻŋ āĻ…āϤāĻŋāϰāĻŋāĻ•ā§āϤ āĻ…ā§āϝāĻžāϰ⧇āϰ āĻĒā§āϰāϝāĻŧā§‹āϜāύ āϝāĻžāϰ āĻĻ⧈āĻ°ā§āĻ˜ā§āϝ āĻŽā§‚āϞ āĻ…ā§āϝāĻžāϰ⧇āϰ āĻĒā§āϰāϤāĻŋāĻĢāϞāύ āĻ•āϰ⧇ (āĻŽāĻžāχāύāĻžāϏ āĻ“āϝāĻŧāĻžāύ, āĻšā§āϝāĻžāρ, āϤāĻŦ⧇ āĻāϟāĻŋ āωāĻĒ⧇āĻ•ā§āώāĻž āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇), āϝāĻžāϰ āĻĢāϞ⧇ O(N) āĻ¸ā§āĻĨāĻžāύāĻŋāĻ• āϜāϟāĻŋāϞāϤāĻž āĻšāϝāĻŧāĨ¤ āĻ­āĻžāϞ, āĻŦāĻ°ā§āϧāĻŋāϤ āĻŽā§‡āĻŽāϰāĻŋ āĻŦā§āϝāĻŦāĻšāĻžāϰ āĻ…ā§āϝāĻžāϞāĻ—āϰāĻŋāĻĻāĻŽā§‡āϰ āϏāĻ°ā§āĻŦāĻžāϧāĻŋāĻ• āĻĻāĻ•ā§āώāϤāĻž āύāĻŋāĻļā§āϚāĻŋāϤ āĻ•āϰ⧇āĨ¤


āφāĻŽāĻŋ āφāĻļāĻž āĻ•āϰāĻŋ āφāĻĒāύāĻŋ āύāĻŋāĻŦāĻ¨ā§āϧāϟāĻŋ āφāĻĒāύāĻžāϰ āĻ­āĻŋāĻĄāĻŋāĻ“ āϏāĻžāĻ•ā§āώāĻžā§ŽāĻ•āĻžāϰ⧇āϰ āĻĒāϰāĻŋāĻĒā§‚āϰāĻ• āĻšāĻŋāϏāĻžāĻŦ⧇ āĻĻāϰāĻ•āĻžāϰ⧀ āĻŦāϞ⧇ āĻŽāύ⧇ āĻ•āϰ⧇āύāĨ¤ āĻāϟāĻŋ āĻĻ⧇āĻ–āĻžāϝāĻŧ āϝ⧇ āĻāĻ•āϟāĻŋ āϏāĻžāϧāĻžāϰāĻŖ āϏāĻŽāĻ¸ā§āϝāĻž āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āĻĒāϰāĻŋāĻŽāĻžāϪ⧇ āĻŦā§āϝāĻŦāĻšā§ƒāϤ āϏāĻŽā§āĻĒāĻĻ (āϏāĻŽāϝāĻŧ, āĻ¸ā§āĻŽā§ƒāϤāĻŋ) āĻĻāĻŋāϝāĻŧ⧇ āĻŦāĻŋāĻ­āĻŋāĻ¨ā§āύ āωāĻĒāĻžāϝāĻŧ⧇ āϏāĻŽāĻžāϧāĻžāύ āĻ•āϰāĻž āϝ⧇āϤ⧇ āĻĒāĻžāϰ⧇āĨ¤

Skillbox āϏ⧁āĻĒāĻžāϰāĻŋāĻļ āĻ•āϰ⧇:

āωāĻ¤ā§āϏ: www.habr.com

DDoS āϏ⧁āϰāĻ•ā§āώāĻž, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ āϏāĻš āϏāĻžāχāϟāϗ⧁āϞāĻŋāϰ āϜāĻ¨ā§āϝ āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ đŸ”Ĩ DDoS āϏ⧁āϰāĻ•ā§āώāĻž āϏāĻš āύāĻŋāĻ°ā§āĻ­āϰāϝ⧋āĻ—ā§āϝ āĻ“āϝāĻŧ⧇āĻŦāϏāĻžāχāϟ āĻšā§‹āĻ¸ā§āϟāĻŋāĻ‚ āĻ•āĻŋāύ⧁āύ, VPS VDS āϏāĻžāĻ°ā§āĻ­āĻžāϰ | ProHoster