αααβαααα»αβαααα»αβαα·ααααΆβααΆαβα’αα»ααααβαααα½αβαααααααΆα αααα»αβααΆαβαα½αβααΏαβαααα
α’ααααααααααΊααΆααααααααααΆαααααΆααααΆαα½αααΈααα’αΌα αα
αααα»αααα αααα»αααααααααααααΎαααααααααΆαααΆααα’αααααααΆααααα αΆα ααΌααα½αααΆααααααααααΆαααααα½ααααααααα»ααααααααααααΆααα
αααα»α JavaScript α nuances αα algorithm ααΈαα½αα ααααααΌαααΆααα·ααΆααααΆαααααα
ααΎαααααΉαα αααααΆααα’αααα’αΆαααΆααα’αααα "Habr" - ααΆααααα α»αααααα 10 rubles αα αααα α»αααααααααα»ααααααα·ααααΆ Skillbox ααΆαα½ααααααααΎαααααΌαααααααααααΆα "Habr" α
Skillbox ααααΆαα αααααα·ααααΆααΆααααααα
"α’αααα’αα·ααααααα ααα PRO" .
ααΆααααααΎααααα αΆ
ααΎαβααααΌαβααΆαβαααααβα’αΆααβαααβααΆαβαααααΆβαα·α αα·αβαααααβααΆααααΆααα αααααΆααααααΆααααΌαααΆαααααΎα±αααααααΎαα’αα»ααααααααααα‘αααα·α α¬αα·ααα·α α’αΆαααααααΎααΆααΎααααΌααααααααΆααααΈααα αααα»αα’αΆααα’αΆα ααααΎααΉαααααααααααΆααααααα±ααα
αααααΆααα·αααα ααΎααΆαα ααα½ααααααΈααα αααα»αα’αΆαα x αα·α y ααααα αααααΌααααα αΌαααααΆααααΎααΉαααααααααααΆααααααΆαααααα¬αα?
α§ααΆα ααα α
ααααα·αααΎααΎααααααα’αΆαα [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 ααα»αααααα αααα»ααααααααααΆαααα ααΎαααΆααααααααααΎαααΆααααΈα)α
αααααΆααααααααααααΆαααααααΎαααααΎααΌαα nested αααααΆααααααα·ααα»α, ααΆααΊαα½ααααα»αααΆαα½αααΉαααΆααααα»αααααΆααααααααΆ O (NΒ²) α
αααααααααΆαααΈ 2: ααΆαααααααααααααααααααααΈα
ααΆααααα»αααααΆααααααααααΆα O(Nlog(N)) α
ααΆααααα»αααααΆαααααα α O(1).
αααααΆαα’αΆααααααΌαααΆααααααα ααΎαα’αΆα ααααααααααααααααΆααααααααΎααΆαααααααααααααααααααααΈαα αααααΊααΆαααα½ααααααααΆαααααΆαααααα·αααααΆααααα»ααααααΆααα’αΆαααααααΆααααααΆαα·αα ααΆαααααααααααααααααααααΈαααΆααααααααΆααααΎαααΆα O(log(N))α ααααααΆαααΆααααα α’ααααα ααααααΌαααααΎ a 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] α αααααΆααααααΆαααααΎαααααααα’αΆααααααα·αααΆαααααα αΌααα·αα·ααααααααΌα α αΎαααααΎααΆαααααααααααααααααααααΈα ααΎααααΈααΎαααΆααΎαααααααΆαα½αααααα αααα’αΆα ααααΌαααΆααααααααα α’αΆααααΎααααΈαααααΎαααααΌααααα ααααΆαα αααααααΆααααααααΌαααΆαα’αα»αααααααααααααΆααααΆαα»ααΈαα½αααα αααα»αα’αΆααα
αααααΆααααααα·ααα»ααααα½αααΆααΉαααΆαααΆααααα»αααααΆααααααααΆααΈααα’ααααα 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))α ααΎααΆα’αΆα αα αα½α αααααα»αααΆαααααααααααααααααΆαααΈααα’αααααΆαα½αααΉαα’αΆααααααα·αααΆαααααΆαα?
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.prototype.includes() ααΎαα’αΆα ααΎα polyfill ααααααααααα MDN (αα·ααααααααΆ JavaScript) α¬ααααΎαα·ααΈααΆααααααααα»αααΌαααααααα JavaScript engine ααΌα ααΆ 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 loop αα αααα»αααα αΆαααΈ 7 ααα (ααααΎααα) ααααααΆααααααααααΆααααΌαααα’αΆαααααααΆααααααα±ααα αααααΆααααααΆααΆααααα»αααααΆααααααααααΆααααααΆααααΆααΈααα’ααααααααα ααΆααΆααααααΎαααΆαα αααααΆαααΆαααααααΆααα αΆααα½ααα ααΈαααααα’αΆααα ααααααααααΎα ααΆααααα»αααααΆααααααααααΆααΊ O (N + (N - 1)) α αααααααΎ Big O Notation ααΎαααααα½αααΆαα ααΆ O(N) - αααααααΆααΆ N αααααΆαα₯αααα·ααααααΆαααααα»ααα ααααααααΎαααα ααααα αΌαα
ααΆααααααΉαααΆααααα»αααααΆααααααααα α’αΆααααααααααΊααααΌαααΆαααΆα αΆαααΆα ααααααααααααααααΆαααα»ααααα αΆααααΈα’αΆααααΎα (αααα½α ααΆα/α αΆα ααα»ααααααΆα’αΆα ααααΌαααΆααααα·αα’αΎααΎ) ααααααααΆαα±ααααΆαααΆααααα»αααααΆααααααααα O(N)α ααΆααΆααααααΎαααΆαα ααΆααααααΎαααΆαααααΎααααΆααα’αααα αα αΆαααΆααΆααΌαααααα·αααααΆαα’αα·ααααΆαααααα½ααααααααΆαα
αααα»ααααααΉαααΆα’αααααααΎαα’αααααααΆααααααααα ααΆααΆαααααααα ααααααΆααααααΆαααααΈααα’αΌααααα’αααα ααΆαααα αΆαααΆαααα αΆααΆαααααα½αα’αΆα ααααΌαααΆααααααααΆαααΆααα·ααΈααααααααααΆααΆαα½αααΉαααα·ααΆααααααααααΆααααααΆααααααΆαααααΎ (αααααααΆ ααΆαα αα αΆα) α
Skillbox ααααΆαα
- ααΆαα’αα»αααααααααα·ααααΆααΆαα’ααΈαααΊαα·α
"α’ααααα·ααΆααα·αααααα Python" .- αααααα·ααααΆααΆαα’ααΈαααΊαα·α
"α’αααα’αα·αααααααα»αααααΆα" .- αααααα·ααααΆααΆαααααααααααΆα
"α’αααα’αα·αααααα PHP ααΈ 0 ααα PRO" .
ααααα: www.habr.com