首页 > 编程语言 >算法第四天力扣第704题:二分查找

算法第四天力扣第704题:二分查找

时间:2024-06-03 20:29:26浏览次数:27  
标签:right target nums 704 mid 力扣 查找 第四天 left

704. 二分查找的题目链接如下:

https://leetcode.cn/problems/binary-search/icon-default.png?t=N7T8https://leetcode.cn/problems/binary-search/

    给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1
 示例 1:

输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在nums中并且下标为 4

示例 2:

输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在nums中因此返回 -1

提示:

  1. 你可以假设 nums 中的所有元素是不重复的。
  2. n 将在 [1, 10000]之间。
  3. nums 的每个元素都将在 [-9999, 9999]之间。

 

 利用二分查找的解题方法,具体c++代码(省略力扣的起始给的代码部分)如下:

        int n=nums.size();
        int left=0, right=n-1;
        while(left<=right){
            int mid=left+(right-left)/2; //找中间值
            if(nums[mid]==target){
                return mid;
            }else if(nums[mid]>target){
                right=mid-1; //向左查找
            }else if(nums[mid]<target){
                left=mid+1;  //向右查找
            }else{
                return -1;
            }
        }
        return -1;

 704.二分查找的解题思路

  1. 先定义n,即数组的大小,然后定义左右边界left、right,因为该区间为左闭右闭,所以left=right有意义,故判断条件left<=right。
  2. 找中间值不能写mid=(left+right)/2,因为会溢出,所以只能写mid=left+(right-left)/2。
  3. 如果nums[mid]>target,target在mid的左侧,那么就向左查找,反之nums[mid]<target,target在mid的右侧,那么就得向右开始查找。num[mid]==target,返回数组下标mid,而目标值不存在的话就返回-1。

    二分查找算法的具体知识点解析如下链接所示,感兴趣的读者可点击链接或者复制链接进入学习算法知识:https://mp.csdn.net/mp_blog/creation/editor/139318710

 

    感谢各位读者的阅读与支持,您的支持是我前进的动力!我希望我的博文能够带给您有益的信息和启发,让您的生活更加丰富多彩。如果您有任何问题或意见,请随时联系我或在评论区评论。再次感谢您的支持!希望以上算法题知识对大家有帮助,谢谢各位读者的支持!!! 

标签:right,target,nums,704,mid,力扣,查找,第四天,left
From: https://blog.csdn.net/m0_75068978/article/details/139423559

相关文章

  • 力扣第五题 5.最长回文子串
    目录问题解题思路动态规划中心扩展官方解法1.动态规划2.中心扩展算法3.Manacher 算法问题解题思路我们的回文子串有两种情况,一种是左与右相同,一种是左与右+1的位置所以我们就可以根据这个条件判断是否为子串,然后再扩大判断。还可以使用中心扩展的方式,就判断左......
  • 力扣1168水资源优化
    题目这个题目首先有节点,有双向边,而且要求最少总成本,那么我们最先想到的应该是最小生成树。算法逻辑 在最小生成树中有一个prim算法,个人觉得是和dijkstra非常相似甚至一模一样的,基于贪心思想的一种算法。prim的算法过程:首先找到一个一定存在的节点,然后从这个结点开始......
  • 力扣2891每日一题题解
    题目:给你一个仅由小写英文字母组成的字符串 s 。如果一个字符串仅由单一字符组成,那么它被称为 特殊 字符串。例如,字符串 "abc" 不是特殊字符串,而字符串 "ddd"、"zz" 和 "f" 是特殊字符串。返回在 s 中出现 至少三次 的 最长特殊子字符串 的长度,如果不存在出......
  • 力扣 2642. 设计可以求最短路径的图类 python AC
    朴素dijkstraclassGraph:def__init__(self,n,edges):self.n=nself.INF=float('inf')self.matrix=[[self.INF]*nfor_inrange(n)]foru,v,winedges:self.matrix[u][v]=wdefaddEdg......
  • 力扣 1题 两数之和(哈希) 记录
    题目描述给定一个整数数组nums和一个整数目标值target,请你在该数组中找出和为目标值target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例1:输入:nums=......
  • 深入解析力扣170题:两数之和 III - 数据结构设计(哈希表与双指针法详解及模拟面试问答)
    在本篇文章中,我们将详细解读力扣第170题“两数之和III-数据结构设计”。通过学习本篇文章,读者将掌握如何设计一个数据结构来支持两种操作,并了解相关的复杂度分析和模拟面试问答。每种方法都将配以详细的解释和ASCII图解,以便于理解。问题描述力扣第170题“两数之和III......
  • 力扣刷題---回文數 擊敗100%用戶的解法
    題目:给你一个整数 x ,如果 x 是一个回文整数,返回 true ;否则,返回 false 。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。例如,121 是回文,而 123 不是。示例1:输入:x=121输出:true示例 2:输入:x=-121输出:false解释:从左向右读,为-121。从右......
  • LeetCode 704 二分查找
    第一次提交错误:if-else语句中第二个if前未加else,导致循环出错//二分查找//有序情况下的查找方式,时间复杂度O(logn)//注意左右边界以及停止循环条件left<=right classSolution{publicintsearch(int[]nums,inttarget){......
  • 力扣每日一题 5/31
    2965.找出缺失和重复的数字[简单] 题目:给你一个下标从 0 开始的二维整数矩阵 grid,大小为 n*n ,其中的值在 [1,n2] 范围内。除了 a 出现 两次,b 缺失 之外,每个整数都 恰好出现一次 。任务是找出重复的数字a 和缺失的数字 b 。返回一个下标从0开始、长......
  • 力扣--11.盛最多水的容器
    给定一个长度为 n 的整数数组 height 。有 n 条垂线,第 i 条线的两个端点是 (i,0) 和 (i,height[i]) 。找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。返回容器可以储存的最大水量。说明:你不能倾斜容器。示例1:输入:[1,8,6,2,5,4,8,3,......