
แ แแชแ แแแแแ แแแแแแแก แจแแกแ แฃแแแแแก แแกแฌแแแแแแแ, แแแแก แฌแแแแฌแงแแ . แแก แแ แ แแฎแแแแ แแซแแแแ แฌแแ แแแแแแแแก แแแแก แจแแกแแฎแแ, แแฃ แ แแแแ แขแแ แแแแ แแแขแแ แแแฃแแแ แแแ แขแแฅแแแแแแแฃแ แแแ แแแ แแชแแแแจแ, แแ แแแแ แกแแจแฃแแแแแแก แแแซแแแแ แแแแแแ, แแฃ แ แแแแ แฌแงแแแแ แแแแแ แแแแฃแแ แแ แแแแแแแแ แ แแช แจแแแซแแแแ แแคแแฅแขแฃแ แแ.
แแก แกแขแแขแแ แแ แแก แแแแแแก แแ แแแแแ แ แแแแฎแแแแ. แแแกแจแ แแ แแแซแแแ แแแแแแขแแ แก แงแแแแ แแแฉแแแแแแ แแแแแฌแงแแแขแแก แจแแกแแฎแแ, แแแฃแก แแแแแฌแงแแแขแแก แฉแแแ แกแแแฃแแแ แ แแแ แกแแ JavaScript-แจแ. แแกแแแ แแแแแฎแแแแแ แแแแแแฃแแ แแแแแ แแแแแก แแแฃแแแกแ.
แจแแแแฎแกแแแแแ: "Habr"-แแก แงแแแแ แแแแแฎแแแแแกแแแแก - แคแแกแแแแแแแ 10 แ แฃแแแแแแ Skillbox-แแก แแแแแกแแแแ แแฃแ แกแแ แฉแแ แแชแฎแแแกแแก "Habr" แกแแ แแแแแแ แแแแแก แแแแแงแแแแแแ.
Skillbox แแแ แฉแแแ: แแ แแฅแขแแแฃแแ แแฃแ แกแ .
แแ แแแแแแแก แจแแกแแฎแแ แแแแชแฎแแแแแ
แฉแแแ แแแแซแแแแ แจแแแแแแแแ แแแกแแแ แแ แแแแแ แแขแฃแแ แแแแจแแแแแแแ. แจแแแแแ แแแก แกแแฎแแแแ แจแแฅแแแแก แคแฃแแฅแชแแ, แ แแแแแแช แแแแแ แฃแแแแก true แแ false แแแแกแแ แแแฎแแแแแ, แจแแแซแแแแ แแฃ แแ แ แแแกแแแแก แแแแแกแแแแ แ แแ แ แ แแชแฎแแแก แฏแแแ แแแชแแแฃแแ แแแแจแแแแแแแแก แขแแแ.
แกแฎแแ แกแแขแงแแแแแ แ แแ แแแฅแแแ, แแ แแก แแฃ แแ แ แแแกแแแจแ แแ แ แแแแแ แ แแชแฎแแ, x แแ y, แ แแแแแแแช แแ แแแ แจแแแ แแแแกแแก แฃแแ แแก แแแแแแแแฃแ แแแแจแแแแแแแแก?
แแแแแแแแ แ
แแฃ แฉแแแ แแแแซแแแแ แแแกแแแ [1, 2, 4, 9] แแ แแแแจแแแแแแแ แแ แแก 8, แคแฃแแฅแชแแ แแแแแ แฃแแแแก false-แก, แ แแแแแ แแแกแแแจแ แแ แชแแ แ แแ แ แแชแฎแแก แแ แจแแฃแซแแแ 8-แแก แแแแแขแแแ.
แแแแแแแแ B
แแแแ แแ แแฃ แแก แแ แแก แแแกแแแ [1, 2, 4, 4] แแ แแแแจแแแแแแแ แแ แแก 8, แคแฃแแฅแชแแ แฃแแแ แแแแ แฃแแแแก true, แ แแแแแ 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)). แแฃแแชแ, แแฅแแแ แแแแแ แฃแแแ แแแแแแงแแแแ for loop, แ แแแ แจแแแแแฌแแแ แแแแแแฃแแ แแแแแแแขแ แงแแแแ แกแฎแแ แแแแจแแแแแแแแก แฌแแแแแฆแแแแ.
แแ, แ แแแแ แ แจแแแซแแแแ แแงแแก แแแแแกแแแแแ. แแแกแแแแแแ แ แแ แแแฅแแแ, แฉแแแ แแแงแแแแแ แชแแแแแฃแ แคแฃแแฅแชแแแก แแแแแ แฃแแ แซแแแแแก แแแกแแแแแขแ แแแแแแแ. แแ แแกแแแ 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]. แจแแแแแ แแก แฅแแแแก แแแกแแแแก แแแ แกแแแก แแแ แแแแ แแแแแฅแกแแก แแแแแแแแแแ แแ แแงแแแแแก แแ แแแแ แซแแแแแก, แ แแแ แแแแแแฎแแก, แจแแกแแซแแแแแแแ แแฃ แแ แ แแแกแแแก แแแ แฉแแแแแ แแแแจแแแแแแแแแแก แแแแแขแแแ แกแแกแฃแ แแแแ แฏแแแแก แจแแกแแฅแแแแแแ. แแก แแแฅแแแแแแ แฎแแ แชแแแแแแแ แแแกแแแแก แแแแแแฃแแ แแแแแแแขแแกแแแแก แแ แแฎแแ.
แแแแแ for แแแ แงแฃแแก แแฅแแแแ O(N) แฌแ แคแแแ แแ แแแก แกแแ แแฃแแ, แแแแ แแ for แแแ แงแฃแแแก แจแแแแแ แฉแแแ แแแกแ แฃแแแแ แแ แแแแ แซแแแแแก, แ แแแแแแช แแซแแแแ O(Nlog(N)-แแก แกแแแ แแ แแ แแแก แกแแ แแฃแแแก). แแก แแแแแกแแแแแ แฌแแแแแ แฃแแแแแกแแ, แแแแ แแ แแแฃแแฏแแแแกแแแแก แแแแแแ แฏแแ แแแแแ แแ แกแแแแแก.
แแแแแกแแแแแ 3: แฌแ แคแแแ แแ แ
แแ แแแก แกแแ แแฃแแ: O(N).
แกแแแ แชแแก แกแแ แแฃแแ: O(1).
แแฎแแ แฉแแแ แแแแแแแแ แแแ แแ แแแแแแแก, แแแแแฎแกแแแแ, แ แแ แแแกแแแ แแแแแแแแฃแแแ. แแแแแกแแแแแ แแ แแก แแ แ แ แแชแฎแแแก แแฆแแแ: แแ แแ แแแกแแฌแงแแกแจแ แแ แแ แแ แแแแแก. แแฃ แจแแแแแ แแแแกแฎแแแแแแแ แกแแญแแ แแกแแแ, แแแจแแ แจแแชแแแแแ แกแแฌแงแแกแ แแ แแแกแแกแ แฃแแ แฌแแ แขแแแแแ.
แกแแแแแแแ แฉแแแ แแ แจแแแฎแแแแแแ แกแแกแฃแ แแแ แแแแจแแแแแแแแก แแ แแแแแแ แฃแแแแ true, แแ แกแแฌแงแแกแ แแ แแแกแแกแ แฃแแ แฌแแ แขแแแแแ แแแแแแงแ แแแ แแ แแแแแ แฃแแแแก false.
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)-แแแ). แจแแกแแซแแแแแแแ แแฃ แแ แ แฌแ แคแแแ แแแแแแฎแกแแแก แแแแแ แฃแฌแแกแ แแแ แแแกแแแแ?
Solution 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;
};แแแแฎแกแแแก แกแแคแฃแซแแแแแ for loop, แ แแแแแกแแช, แ แแแแ แช แแแแแ แแแแฎแแ, แแฅแแก O(N) แฌแ แคแแแ แแ แแแก แกแแ แแฃแแ.
แฉแแแแ แคแฃแแฅแชแแแก แแแแ แ แแแแแแแ แแแแแ แแแฌแแแแ Array.prototype.include(), JavaScript แแแแแแ, แ แแแแแแช แแแแแ แฃแแแแก true แแ false แแแแกแแ แแแฎแแแแแ, แจแแแชแแแก แแฃ แแ แ แแแกแแแ แแแชแแแฃแ แแแแจแแแแแแแแก.
Array.prototype.includes()-แแก แแ แแแก แกแแ แแฃแแแก แแแกแแ แแแแแแ, แฉแแแ แจแแแแแซแแแ แแแแแแฎแแแแ MDN-แแก แแแแ แแแฌแแแแแฃแ แแแแแคแแแก (แแ แแแฌแแ แแแ JavaScript-แจแ) แแ แแแแแแแงแแแแ แแแแแแ 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()-แแก แแแแแแแ แแแแแ แแแฌแแแ แแ แแก while แชแแแแ แแ-7 แกแแคแแฎแฃแ แแ, แ แแแแแแช (แแแแฅแแแก) แแแแแก แแแชแแแฃแแ แแแกแแแแก แแแแ แกแแแ แซแแก. แแก แแแจแแแแก, แ แแ แแแกแ แแ แแแก แกแแ แแฃแแแช แฌแ แคแแแแ. แแกแ, แ แแแแแ แแก แงแแแแแแแแก แแ แแ แแแแแฏแแ แฉแแแแ แฉแแแ แฉแแแแก แแแแแแ แแแกแแแก, แแ แแแก แกแแ แแฃแแ แแ แแก O (N + (N - 1)). Big O แแแขแแชแแแก แแแแแงแแแแแแ, แฉแแแ แแแแแ แขแแแแแ แแแก O(N) - แ แแแแแ N แแ แแก แงแแแแแแ แแแแ แแแแแแแ แจแแงแแแแแก แแแแแก แแแแ แแแกแแก.
แ แแช แจแแแฎแแแ แกแแแ แชแฃแ แกแแ แแฃแแแก, แกแแญแแ แแ แแแแแขแแแแแ แแแกแแแ, แ แแแแแก แกแแแ แซแ แแกแแฎแแแก แแแแแแแแ แแแ แแแกแแแก (แแแแฃแก แแ แแ, แแแแฎ, แแแแ แแ แแก แจแแแซแแแแ แแแแแ แแ แแแฃแแ แแงแแก), แ แแก แจแแแแแแแแช O(N) แกแแแ แชแแแ แกแแ แแฃแแ. แแแฎแกแแแ แแแแก แแแแ แแแแ แแแแแงแแแแแ แฃแแ แฃแแแแแงแแคแก แแแแแ แแแแแก แแแฅแกแแแแแฃแ แแคแแฅแขแฃแ แแแแก.
แแแแแ แแแฅแแก, แ แแ แกแขแแขแแ แแฅแแแแแแแก แกแแกแแ แแแแแ แแฅแแแแ, แ แแแแ แช แแฅแแแแ แแแแแ แแแขแแ แแแฃแก แแแแแขแแแ. แแก แแแแฉแแแแแแก, แ แแ แแแ แขแแแ แแ แแแแแแแก แแแแแญแ แ แจแแกแแซแแแแแแแ แ แแแแแแแแ แกแฎแแแแแกแฎแแ แแแแ, แแแแแงแแแแแฃแแ แ แแกแฃแ แกแแแแก แกแฎแแแแแกแฎแแ แ แแแแแแแแแ (แแ แ, แแแฎแกแแแ แแแ).
Skillbox แแแ แฉแแแ:
- แแแแแ แแ แแแแแแ แแฃแ แกแก .
- แแแแแแ แแฃแ แกแ .
- แแ แแฅแขแแแฃแแ แฌแแแก แแฃแ แกแ .
แฌแงแแ แ: www.habr.com
