栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Leetcode练习1.二分查找

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Leetcode练习1.二分查找

Leetcode 1.二分查找


思路:这道题目的前提是数组为有序数组,同时题目还强调数组中无重复元素,因为一旦有重复元素,使用二分查找法返回的元素下标可能不是唯一的,这些都是使用二分法的前提条件,当看到题目描述满足如上条件的时候,可以想一想是不是可以用二分法了。

定义left、right指针,比较目标元素和中间元素的大小,然后不断缩小左右指针的范围继续寻找目标元素。
实际使用求中间mid索引建议用这种方法:int mid = left + (right-left)/2; 可以防止left+right溢出(超出整数范围)。

复杂度:时间复杂度O(logn),空间复杂度O(1)

class Solution {
    public int search(int[] nums, int target) {
        int low = 0 ;
        int high = nums.length-1;
        while (high>=low){
            int mid=low+(high-low)/2;//注意尽量不要用(low+high)/2,避免溢出
            int num=nums[mid];
            if(num==target){
                return mid;
            }else if(num>target){
                high=mid-1;
            }else{
                low=mid+1;
            }
        }
        return -1;
    }
}


思路:注意到一个性质:当一个版本为正确版本,则该版本之前的所有版本均为正确版本;当一个版本为错误版本,则该版本之后的所有版本均为错误版本。我们可以利用这个性质进行二分查找。
将左右边界分别初始化为 1 和 n,其中 n 是给定的版本数量。设定左右边界之后,每次我们都依据左右边界找到其中间的版本,检查其是否为正确版本。如果该版本为正确版本,那么第一个错误的版本必然位于该版本的右侧,我们缩紧左边界;否则第一个错误的版本必然位于该版本及该版本的左侧,我们缩紧右边界。


public class Solution extends VersionControl {
    public int firstBadVersion(int n) {
        int left=1,right=n,mid=1;
        while(left
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/604920.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号