算法一:二分查找

115 阅读1分钟

二分查找的意义

二分查找法主要是解决在“一堆数中找出指定的数”这类问题.

二分查找的条件

  • 存储在数组中
  • 有序排列

解题思路

二分查找就是将查找的键和子数组的中间键作比较,如果查找的键小于中间键,就在左子数组继续查找;如果大于中间键,就在右子数组中查找,否则中间键就是要找的元素。

核心代码

/**
* 二分查找,找到该值在数组中的下标,否则为-1
* nums:数组
* target:目标值
*/
function binarySearch(nums,target){
    int left = 0;
    int right = nums.length -1;
    while(left <= right){
      int mid = (left + right )/2;
      if(nums[mid] == key){
        return mid;
      }else if(nums[mid] < key){
        left = mid + 1;
      }else {
        right = mid -1
      }
    }
    return -1;
    
}

*** 寻找一个数,最简单的方法*** 利用数组的indexOf()方法

function binarySearch(nums,target){
   return nums.indexOf(target)
}

题型演变

  • 查找第一个与key相等的元素
  • 查找最后一个与key相等的元素
  • 查找最后一个等于或小于key的元素
  • 查找最后一个小于key的元素
  • 查找第一个等于或大于key的元素
  • 查找第一个大于key的元素