算法-搜索
Posted 渣渣辉
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了算法-搜索相关的知识,希望对你有一定的参考价值。
顺序搜索
思路径
for循环遍历查找
代码实现
Array.prototype.sequentialSearch = function (n) {
for (let i = 0; i < this.length; i++) {
if (this[i] == n) {
return i;
}
}
return -1
}
const arr = [5, 4, 3, 2, 1];
var result = arr.sequentialSearch(3)
console.log(\'result\', result)
时空复杂度
时间: O(n)
空间: O(1) 没有使用额外的空间
二分搜索
思路径
把数组折成两半
代码实现
Array.prototype.binarySearch = function (n) {
let low = 0;
let high = this.length - 1;
while (low < high) {
let mid = Math.floor((low + high) / 2)
let midElement = this[mid]
if (n > midElement) {
low = mid + 1
} else if (n < midElement) {
high = mid - 1
} else {
return mid;
}
}
return -1;
}
const arr = [5, 4, 3, 2, 1];
var result = arr.binarySearch(3)
console.log(\'result\', result)
时空复杂度
时间: O(logN)
空间: O(1) 没有使用额外的空间
leetcode:374
猜数字大小
function guess(guess) {
if (guess == 6) {
return 0
} else if (guess > 6) {
return -1
} else {
return 1
}
}
function guessNumber(n) {
let low = 1;
let high = n;
while (low <= high) {
let mid = Math.floor((low + high) / 2)
const res = guess(mid)
// console.log(\'mid\', mid)
// console.log(\'res\', res)
if (mid === 0) {
return mid
} else if (res === 1) {
low = mid + 1
} else {
high = mid - 1
}
}
}
let result = guessNumber(6)
console.log(\'result\',result);
时空复杂度
时间: O(logN)
空间: O(1) 没有使用额外的空间
以上是关于算法-搜索的主要内容,如果未能解决你的问题,请参考以下文章
片段(Java) | 机试题+算法思路+考点+代码解析 2023