首页 > 其他分享 >二分查找

二分查找

时间:2022-12-28 22:55:33浏览次数:82  
标签:二分 right int mid 查找 左闭 left

一、二分查找

1.二分查找方法概述

  • 二分查找是针对有序数组的一种查找方式。是利用(letf+right)/2 = mid的方式来对半缩短搜索范围的一种方法,一次查找,搜索的范围就会减半。相较于简单查找找寻一个target需要n步,则二分查找则最多只需查找log2n步。

2.具体实现

方法一

点击查看代码
class Solution {
    public int search(int[] nums, int target) {
        int left = 0;
        int right = nums.length -1;
        while(left <= right){
            int mid = (right+left)/2;
            if(nums[mid] == target){
                return mid;
            }else if(nums[mid] > target){
                right = mid -  1;
            }else{
                left = mid + 1;
            }
        }
        return -1;
    }
}

方法二

点击查看代码
class Solution {
    public int search(int[] nums, int target) {
        int left = 0;
        right = nums.length;
        while (left < right) {
            int mid = left + ((right - left) >> 1);
            if (nums[mid] == target)
                return mid;
            else if (nums[mid] < target)
                left = mid + 1;
            else if (nums[mid] > target)
                right = mid;
        }
        return -1;
    }
}

3.要点总结

1.关于length是否-1的问题

  • length是否-1取决于区间是左闭右闭区间( [ ],还是左闭右开区间( [ ) ).当选取左闭右闭区间( [ ]时,length则需要-1,因为搜索区间包含右边界值,即整个数组下标都能取到则length需要-1。如果是左闭右开区间( [ ) )length则不需要-1,因为右边界值不包含在搜索区间内,右边界值的取值无意义。

2.关于循环条件letf是<=还是<的问题

  • 当区间是左闭右闭区间( [ ]left则取<= right。当区间是左闭右开区间( [ ) )时,则不取=

3.关于赋值是赋mid的还是mid-1的问题

  • 当区间是左闭右闭区间( [ ]时,mid则需要-1,因为mid包含在有效值区间,已经排除。当区间是左闭右开区间( [ ) )时,mid则不需要-1,因为mid的值不包含在有效的搜索区间内,无需排除,所以无需-1

仅供个人参考,同时欢迎批评指正。

标签:二分,right,int,mid,查找,左闭,left
From: https://www.cnblogs.com/neverlate/p/17011463.html

相关文章

  • 算法刷题 Day 1 | 704.二分查找 & 27.移除元素
    今天是开始刷题的第一天,就像背单词书又从Abandon开始了一样,但是这次一定要坚持下来。第一天的内容是熟悉的数组,先来看第一题二分查找704.二分查找题目链接:https://leetc......
  • 二分查找(leetcode easy 704)、移除元素(leetcode easy 27)
    二分查找题目链接:https://leetcode.cn/problems/binary-search/思路:暴力法:直接遍历一边数组查找元素.此方法适用于任何数组查找.(时间复杂度O(n)、空间复杂度O(......
  • 刷刷刷Day1| LeetCode704. 二分查找,27. 移除元素
    704.二分查找LeetCode题目要求给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。......
  • 二分法查找算法优化
    摘要:使用位运算和减少计算次数的技巧优化二分查找算法。在《算法——二分法查找》的二分法实现源码binarySearch_2实现中,可以发现计算了两次mid,那有没有办法计算一次呢?另......
  • C语言—实现二分查找(1)
    —,顺序查找和二分查找二:逻辑三,代码实现和结果四,知识点—,顺序查找和二分查找顺序查找:从第一个数字一个一个往后找,直到找到为止。        ag:有一组有序数字:1......
  • Linux文件查找查看
    文件类型区分即文件权限的第一个,如:-rw-r--r--,则该文件属于普通文件-普通文件d目录c字符设备文件,终端就是一个典型b......
  • 「查找表」观沧海
    本题为12月28日22寒假集训每日一题题解题目来源:(未知)题面题目描述《观沧海》曹操东临碣石,以观沧海。水何澹澹,山岛竦峙。树木丛生,百草丰茂。秋风萧瑟,洪波涌起......
  • 访问者模式对树进行递归查找
    fun<T,ID>CrudRepository<T,ID>.visit(start:ID?,visitor:(T)->Boolean)whereT:TreeNode<ID>{varcurrentId=startdo{valnode=fin......
  • 【新生寒训】day 1 二分
    【新生寒训】day1二分二分是非常重要滴......
  • Unity中查找子组件GameObject或Component的操作汇总
    1.GameObject属性:tag常用于区分游戏中不同类型的对象(例如区分玩家和NPC)name:游戏物体的名称 方法:SetActive:使游戏物体处于活跃/不活跃状态例:other.gameObject.SetAc......