
āϝāĻāύ āĻāĻŽāĻŋ āĻ
ā§āϝāĻžāϞāĻāϰāĻŋāĻĻāĻŽā§āϰ āĻāϰā§āĻŽāĻā§āώāĻŽāϤāĻž āĻ
āϧā§āϝāϝāĻŧāύ āĻāϰāĻāĻŋāϞāĻžāĻŽ, āϤāĻāύ āĻāĻŽāĻŋ āĻāĻāĻŋ āĻā§āĻĄāĻŧā§ āĻāϏā§āĻāĻŋ . āĻāĻāĻŋ āĻā§āĻŦāϞ āĻŦāĻĄāĻŧ āĻĒā§āϰāϝā§āĻā§āϤāĻŋ āĻāϰā§āĻĒā§āϰā§āĻļāύāĻā§āϞāĻŋāϤ⧠āĻā§āĻāĻžāĻŦā§ āϏāĻžāĻā§āώāĻžāϤā§āĻāĻžāϰ āύā§āĻāϝāĻŧāĻž āĻšāϝāĻŧ āϤāĻžāϰ āĻāĻāĻāĻŋ āϧāĻžāϰāĻŖāĻž āĻĻā§āϝāĻŧ āύāĻž, āϤāĻŦā§ āĻāĻĒāύāĻžāĻā§ āĻā§āĻāĻžāĻŦā§ āĻ
ā§āϝāĻžāϞāĻāϰāĻŋāĻĻāĻŽāĻŋāĻ āϏāĻŽāϏā§āϝāĻžāĻā§āϞāĻŋ āϝāϤāĻāĻž āϏāĻŽā§āĻāĻŦ āĻĻāĻā§āώāϤāĻžāϰ āϏāĻžāĻĨā§ āϏāĻŽāĻžāϧāĻžāύ āĻāϰāĻž āĻšāϝāĻŧ āϤāĻž āĻŦā§āĻāĻžāϰ āĻ
āύā§āĻŽāϤāĻŋ āĻĻā§āϝāĻŧāĨ¤
āĻāĻ āύāĻŋāĻŦāύā§āϧāĻāĻŋ āĻāĻŋāĻĄāĻŋāĻāĻāĻŋāϰ āĻāĻ āϧāϰāĻŖā§āϰ āĻ
āύā§āώāĻā§āĻāĨ¤ āĻāĻāĻŋāϤ⧠āĻāĻŽāĻŋ āĻĻā§āĻāĻžāύ⧠āϏāĻŽāϏā§āϤ āϏāĻŽāĻžāϧāĻžāύā§āϰ āĻāĻĒāϰ āĻŽāύā§āϤāĻŦā§āϝ āĻĒā§āϰāĻĻāĻžāύ āĻāϰāĻŋ, āĻāĻŦāĻ āĻāĻžāĻāĻžāϏā§āĻā§āϰāĻŋāĻĒā§āĻā§ āϏāĻŽāĻžāϧāĻžāύā§āϰ āĻāĻŽāĻžāϰ āύāĻŋāĻāϏā§āĻŦ āϏāĻāϏā§āĻāϰāĻŖāĨ¤ āĻĒā§āϰāϤāĻŋāĻāĻŋ āĻ
ā§āϝāĻžāϞāĻāϰāĻŋāĻĻāĻŽā§āϰ āϏā§āĻā§āώā§āĻŽāϤāĻžāĻ āĻāϞā§āĻāύāĻž āĻāϰāĻž āĻšāϝāĻŧā§āĻā§āĨ¤
āĻāĻŽāϰāĻž āĻŽāύ⧠āĻāϰāĻŋāϝāĻŧā§ āĻĻāĻŋāĻā§āĻāĻŋ: "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
