0
点赞
收藏
分享

微信扫一扫

常见查找算法

花海书香 2022-03-30 阅读 66

常见算法

二分查找

二分查找的适用场景:数组元素有序且不重复

循环条件: left <= right
中间位置计算: mid = left + ((right -left) >> 1) ( 位运算 >> 1 即 除法运算 / 2)
左边界更新:left = mid + 1
右边界更新: right = mid - 1
返回值: mid 或 -1

实例:给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。

  1. 选取区间为[left, right],low = 0,right= numsSize -1为数组下标索引
  2. 如果nums[mid] == target不成立时,判断target的区间范围为[left, mid -1],还是[mid + 1, right]。其中mid = (right + left) / 2
  3. 选取边界值当 left == right t时,为数组最后一次需要判断的数据.
int searchInsert(int* nums, int numsSize, int target){
    int left = 0;
    int right = numsSize - 1;
    int mid  = 0;

    while (left <= right) { // 循环条件
        mid = left + (right - left) / 2; // 防止right + left溢出。等价于(right + left) / 2
		//  或者mid = left + ((right -left) >> 1) ( 位运算 >> 1 即 除法运算 / 2)
		
        if (nums[mid] == target) {
            return mid;
        } else if (nums[mid] > target) { 
            right = mid - 1; // target位于左区间 [left, mid -1]
        } else {
            left = mid + 1; // target位于右区间 [mid + 1, right]
        }
    }

    return left;
}

参考链接

  • https://leetcode-cn.com/problems/search-insert-position/
举报

相关推荐

0 条评论