рдЬрдм рдо рдПрд▓реНрдЧреЛрд░рд┐рджрдордХреЛ рдХрд╛рд░реНрдпрд╕рдореНрдкрд╛рджрди рдЕрдзреНрдпрдпрди рдЧрд░рд┐рд░рд╣реЗрдХреЛ рдерд┐рдПрдБ, рдореИрд▓реЗ рдпреЛ рднреЗрдЯреЗрдВ
рдпреЛ рд▓реЗрдЦ рднрд┐рдбрд┐рдпреЛ рд╕рдВрдЧ рд╕рдВрдЧрдд рдХреЛ рдПрдХ рдкреНрд░рдХрд╛рд░ рд╣реЛред рдпрд╕рдорд╛ рдо рджреЗрдЦрд╛рдЗрдПрдХрд╛ рд╕рдмреИ рд╕рдорд╛рдзрд╛рдирд╣рд░реВрдорд╛ рдЯрд┐рдкреНрдкрдгреАрд╣рд░реВ рдкреНрд░рджрд╛рди рдЧрд░реНрджрдЫреБ, рд╕рд╛рдереИ JavaScript рдорд╛ рд╕рдорд╛рдзрд╛рдирдХреЛ рдореЗрд░реЛ рдЖрдлреНрдиреИ рд╕рдВрд╕реНрдХрд░рдгред рдкреНрд░рддреНрдпреЗрдХ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдордХреЛ рд╕реВрдХреНрд╖реНрдорддрд╛рд╣рд░реВ рдкрдирд┐ рдЫрд▓рдлрд▓ рдЧрд░рд┐рдиреНрдЫред
рд╣рд╛рдореА рд╕рдореНрдЭрд╛рдЙрдБрдЫреМрдВ: рд╕рдмреИ Habr рдкрд╛рдардХрд╣рд░реВрдХрд╛ рд▓рд╛рдЧрд┐ - Habr рдкреНрд░реЛрдореЛ рдХреЛрдб рдкреНрд░рдпреЛрдЧ рдЧрд░реА рдХреБрдиреИ рдкрдирд┐ Skillbox рдкрд╛рдареНрдпрдХреНрд░рдордорд╛ рднрд░реНрдирд╛ рдЧрд░реНрджрд╛ резреж,режрежреж рд░реВрдмрд▓ рдЫреБрдЯред
Skillbox рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрдЫ: рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо
"рдореЛрдмрд╛рдЗрд▓ рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛ рдкреНрд░реЛ" .
рд╕рдорд╕реНрдпрд╛рдХреЛ рдЧрдарди
рд╣рд╛рдореАрд▓рд╛рдИ рдЕрд░реНрдбрд░ рдЧрд░рд┐рдПрдХреЛ рдПрд░реЗ рд░ рдПрдХ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдорд╛рди рджрд┐рдЗрдПрдХреЛ рдЫред рддреНрдпрд╕рдкрдЫрд┐ array рдорд╛ рдХреБрдиреИ рдкрдирд┐ рджреБрдИ рд╕рдВрдЦреНрдпрд╛рдХреЛ рдпреЛрдЧрдлрд▓ рджрд┐рдЗрдПрдХреЛ рдорд╛рди рдмрд░рд╛рдмрд░ рд╣реБрди рд╕рдХреНрдЫ рдХрд┐ рдЫреИрди рднрдиреНрдиреЗ рдЖрдзрд╛рд░рдорд╛ рд╕рд╣реА рд╡рд╛ рдЧрд▓рдд рдлрд░реНрдХрд╛рдЙрдиреЗ рдкреНрд░рдХрд╛рд░реНрдп рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрди рд╕реЛрдзрд┐рдиреНрдЫред
рдЕрд░реНрдХреЛ рд╢рдмреНрджрдорд╛, рдХреЗ рддреНрдпрд╣рд╛рдБ рдПрд░реЗрдорд╛ рджреБрдИрд╡рдЯрд╛ рдкреВрд░реНрдгрд╛рдЩреНрдХрд╣рд░реВ рдЫрдиреН, x рд░ y, рдЬрд╕рд▓рд╛рдИ рд╕рдБрдЧреИ рдЬреЛрдбреНрджрд╛ рддреЛрдХрд┐рдПрдХреЛ рдорд╛рди рдмрд░рд╛рдмрд░ рд╣реБрдиреНрдЫ?
рдЙрджрд╛рд╣рд░рдг рдП
рдпрджрд┐ рд╣рд╛рдореАрд▓рд╛рдИ рдПрд░реЗ [1, 2, 4, 9] рджрд┐рдЗрдПрдХреЛ рдЫ рд░ рдорд╛рди 8 рдЫ рднрдиреЗ, рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ рдЧрд▓рдд рдлрд░реНрдХрд╛рдЙрдБрдЫ рдХрд┐рдирднрдиреЗ рдПрд░реЗрдорд╛ рдХреБрдиреИ рдкрдирд┐ рджреБрдИ рд╕рдВрдЦреНрдпрд╛рд╣рд░реВ 8 рд╕рдореНрдо рдердкреНрди рд╕рдХреНрджреИрдиред
рдЙрджрд╛рд╣рд░рдг B
рддрд░ рдпрджрд┐ рдпреЛ рдПрд░реЗ [1, 2, 4, 4] рд╣реЛ рд░ рдорд╛рди 8 рд╣реЛ рднрдиреЗ, рдкреНрд░рдХрд╛рд░реНрдпрд▓реЗ 4 + 4 = 8 рдХреЛ рдХрд╛рд░рдгрд▓реЗ рд╕рд╣реА рдлрд░реНрдХрд╛рдЙрдиреБ рдкрд░реНрдЫред
рд╕рдорд╛рдзрд╛рди рез: рдмреНрд░реБрдЯ рдлреЛрд░реНрд╕
рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛: 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┬▓) рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛рд╕рдБрдЧ рдЪрддреБрд░реНрднреБрдЬ рд╣реЛред
рд╕рдорд╛рдзрд╛рди реи: рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ
рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛: O(Nlog(N))ред
рдЕрдиреНрддрд░рд┐рдХреНрд╖ рдЬрдЯрд┐рд▓рддрд╛: O(1).
рдПрд░реЗрд╣рд░реВ рдЕрд░реНрдбрд░ рднрдПрдХрд╛рд▓реЗ, рд╣рд╛рдореА рдмрд╛рдЗрдирд░реА рдЦреЛрдЬреА рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░ рд╕рдорд╛рдзрд╛рди рдЦреЛрдЬреНрди рд╕рдХреНрдЫреМрдВред рдпреЛ рдХреНрд░рдордмрджреНрдз arrays рдХреЛ рд▓рд╛рдЧрд┐ рд╕рдмреИрднрдиреНрджрд╛ рдХреБрд╢рд▓ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдо рд╣реЛред рдмрд╛рдЗрдирд░реА рдЦреЛрдЬрдорд╛ O(log(N)) рдХреЛ рдЪрд▓рд┐рд░рд╣реЗрдХреЛ рд╕рдордп рд╣реБрдиреНрдЫред рдпрджреНрдпрдкрд┐, рддрдкрд╛рдИрдВрд▓реЗ рдЕрдЭреИ рдкрдирд┐ рдЕрдиреНрдп рд╕рдмреИ рдорд╛рдирд╣рд░реВ рд╡рд┐рд░реБрджреНрдз рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡ рдЬрд╛рдБрдЪ рдЧрд░реНрдирдХреЛ рд▓рд╛рдЧрд┐ рд▓реБрдк рдкреНрд░рдпреЛрдЧ рдЧрд░реНрди рдЖрд╡рд╢реНрдпрдХ рдЫред
рдпрд╣рд╛рдБ рдПрдХ рд╕рдорд╛рдзрд╛рди рдЬрд╕реНрддреЛ рджреЗрдЦрд┐рди рд╕рдХреНрдЫред рдЪреАрдЬрд╣рд░реВ рд╕реНрдкрд╖реНрдЯ рдЧрд░реНрди, рд╣рд╛рдореА рдмрд╛рдЗрдирд░реА рдЦреЛрдЬ рдирд┐рдпрдиреНрддреНрд░рдг рдЧрд░реНрди рдЫреБрдЯреНрдЯреИ рдкреНрд░рдХрд╛рд░реНрдп рдкреНрд░рдпреЛрдЧ рдЧрд░реНрдЫреМрдВред рд░ рдкрдирд┐ removeIndex() рдкреНрд░рдХрд╛рд░реНрдп, рдЬреЛ рджрд┐рдЗрдПрдХреЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдорд╛рдЗрдирд╕ array рдХреЛ рд╕рдВрд╕реНрдХрд░рдг рдлрд░реНрдХрд╛рдЙрдБрдЫред
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;
};
рдПрд▓реНрдЧреЛрд░рд┐рджрдо рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ [реж] рдмрд╛рдЯ рд╕реБрд░реБ рд╣реБрдиреНрдЫред рдпрд╕рд▓реЗ рддреНрдпрд╕рдкрдЫрд┐ рдкрд╣рд┐рд▓реЛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдмрд╛рд╣реЗрдХ рдПрд░реНрд░реЗрдХреЛ рд╕рдВрд╕реНрдХрд░рдг рд╕рд┐рд░реНрдЬрдирд╛ рдЧрд░реНрджрдЫ рд░ рдмрд╛рдЗрдирд░реА рдЦреЛрдЬреА рдкреНрд░рдпреЛрдЧ рдЧрд░реНрджрдЫ рдХрд┐ рдЗрдЪреНрдЫрд┐рдд рдпреЛрдЧрдлрд▓ рдЙрддреНрдкрд╛рджрди рдЧрд░реНрди рдПрд░реЗрдорд╛ рдмрд╛рдБрдХреА рдорд╛рдирд╣рд░реВ рдердкреНрди рд╕рдХрд┐рдиреНрдЫред рдпреЛ рдХрд╛рд░реНрдп рдПрд░реЗрдорд╛ рдкреНрд░рддреНрдпреЗрдХ рддрддреНрд╡рдХреЛ рд▓рд╛рдЧрд┐ рдПрдХ рдкрдЯрдХ рдЧрд░рд┐рдиреНрдЫред
рд▓реВрдкрдХреЛ рд▓рд╛рдЧрд┐ рдЖрдлреИрдорд╛ 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 array рд╕рдВрдЧ рдПрдХ рд░реЗрдЦреАрдп рд╕рдорд╛рдзрд╛рди рдлреЗрд▓рд╛ рдкрд╛рд░реНрди рд╕рдореНрднрд╡ рдЫ?
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 рдорд╛ рджрд┐рдЗрдПрдХреЛ рдорд╛рди рд╕рдорд╛рд╡реЗрд╢ рдЫ рдХрд┐ рдЫреИрди рднрдиреНрдиреЗ рдЖрдзрд╛рд░рдорд╛ рд╕рд╣реА рд╡рд╛ рдЧрд▓рдд рдлрд░реНрдХрд╛рдЙрдБрдЫред
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 рдорд╛ рд░рд╣реЗрдХреЛ while рд▓реВрдк рд╣реЛ рдЬрд╕рд▓реЗ (рд▓рдЧрднрдЧ) рджрд┐рдЗрдПрдХреЛ рдПрд░реЗрдХреЛ рд╕рдореНрдкреВрд░реНрдг рд▓рдореНрдмрд╛рдЗрд▓рд╛рдИ рдкрд╛рд░ рдЧрд░реНрджрдЫред рдпрд╕рдХреЛ рдЕрд░реНрде рдпрд╕рдХреЛ рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛ рдкрдирд┐ рд░реЗрдЦреАрдп рдЫред рдареАрдХ рдЫ, рдХрд┐рдирдХрд┐ рдпреЛ рд╕рдзреИрдВ рд╣рд╛рдореНрд░реЛ рдореБрдЦреНрдп рдПрд░реЗ рдкрдЫрд┐ рдПрдХ рдХрджрдо рдЫ, рд╕рдордп рдЬрдЯрд┐рд▓рддрд╛ O (N + (N - 1)) рд╣реЛред рдмрд┐рдЧ рдУ рдиреЛрдЯреЗрд╢рди рдкреНрд░рдпреЛрдЧ рдЧрд░реЗрд░, рд╣рд╛рдореА рдпрд╕рд▓рд╛рдИ O(N) рдорд╛ рд╕рд░рд▓ рдмрдирд╛рдЙрдБрдЫреМрдВ - рдХрд┐рдирднрдиреЗ рдпреЛ N рд╣реЛ рдЬрд╕рд▓реЗ рдЗрдирдкреБрдЯ рд╕рд╛рдЗрдЬ рдмрдврд╛рдЙрдБрджрд╛ рд╕рдмреИрднрдиреНрджрд╛ рдареВрд▓реЛ рдкреНрд░рднрд╛рд╡ рдкрд╛рд░реНрдЫред
рд╕реНрдерд╛рдирд┐рдп рдЬрдЯрд┐рд▓рддрд╛рдХреЛ рд╕рдиреНрджрд░реНрднрдорд╛, рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдПрд░реЗ рдЖрд╡рд╢реНрдпрдХ рдЫ рдЬрд╕рдХреЛ рд▓рдореНрдмрд╛рдЗрд▓реЗ рдореВрд▓ рдПрд░реЗрд▓рд╛рдИ рдкреНрд░рддрд┐рдмрд┐рдореНрдмрд┐рдд рдЧрд░реНрдЫ (рдорд╛рдЗрдирд╕ рд╡рди, рд╣реЛ, рддрд░ рддреНрдпрд╕рд▓рд╛рдИ рдмреЗрд╡рд╛рд╕реНрддрд╛ рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫ), рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк O(N) рд╕реНрдерд╛рдирд┐рдп рдЬрдЯрд┐рд▓рддрд╛ рд╣реБрдиреНрдЫред рдареАрдХ рдЫ, рдореЗрдореЛрд░реА рдЙрдкрдпреЛрдЧ рдмрдвреНрдпреЛ рдПрд▓реНрдЧреЛрд░рд┐рдереНрдордХреЛ рдЕрдзрд┐рдХрддрдо рджрдХреНрд╖рддрд╛ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдЧрд░реНрджрдЫред
рдорд▓рд╛рдИ рдЖрд╢рд╛ рдЫ рдХрд┐ рддрдкрд╛рдИрдВрд▓реЗ рдЖрдлреНрдиреЛ рднрд┐рдбрд┐рдпреЛ рдЕрдиреНрддрд░реНрд╡рд╛рд░реНрддрд╛рдХреЛ рдкреВрд░рдХрдХреЛ рд░реВрдкрдорд╛ рд▓реЗрдЦ рдЙрдкрдпреЛрдЧреА рдкрд╛рдЙрдиреБрднрдпреЛред рдпрд╕рд▓реЗ рджреЗрдЦрд╛рдЙрдБрдЫ рдХрд┐ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдорд╕реНрдпрд╛ рд╡рд┐рднрд┐рдиреНрди рддрд░рд┐рдХрд╛рдорд╛ рдкреНрд░рдпреЛрдЧ рдЧрд░рд┐рдПрдХрд╛ рд╕реНрд░реЛрддрд╣рд░реВ (рд╕рдордп, рдореЗрдореЛрд░реА) рд╕рдВрдЧ рдзреЗрд░реИ рдлрд░рдХ рддрд░рд┐рдХрд╛рдорд╛ рд╕рдорд╛рдзрд╛рди рдЧрд░реНрди рд╕рдХрд┐рдиреНрдЫред
Skillbox рд╕рд┐рдлрд╛рд░рд┐рд╕ рдЧрд░реНрджрдЫ:
- рдЕрдирд▓рд╛рдЗрди рдкрд╛рдареНрдпрдХреНрд░рдо рд▓рд╛рдЧреВ рдЧрд░рд┐рдпреЛ
"рдкрд╛рдЗрдерди рдбрд╛рдЯрд╛ рд╡рд┐рд╢реНрд▓реЗрд╖рдХ" .- рдЕрдирд▓рд╛рдЗрди рдХреЛрд░реНрд╕
"рдкреЗрд╢реЗ рдлреНрд░рдиреНрдЯрдПрдиреНрдб рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛" .- рдПрдХ рд╡рд░реНрд╖рдХреЛ рд╡реНрдпрд╛рд╡рд╣рд╛рд░рд┐рдХ рдкрд╛рдареНрдпрдХреНрд░рдо
"0 рджреЗрдЦрд┐ PRO рдорд╛ PHP рд╡рд┐рдХрд╛рд╕рдХрд░реНрддрд╛" .
рд╕реНрд░реЛрдд: www.habr.com