算法-搜索

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

如何在 BottomNavigationView 的片段上打开搜索界面?

如何在bash终端中实现CTRL-R(反向搜索)?

26个jQuery代码片段使用技巧

搜索文本中多个字符串之一的有效算法?