1、线性查找在我们了解二分查找之前,我们先来了解线性查找线性查找的思想: 我们在对数组遍历的时候,通过每个值每个值的判断去实现我们的待查找的值是否存在当前数组中,如果存在就返回当前的索引。代码实现:publicintfindTarget(int[]arr,inttarget){for(inti=0;i此时我们发现当前数组的顺序是无序的,当我们在有序数组中去查找目标数的时候会出现什么样的情况呢?2、有序数组int[]arr={1,2,3,4,5,6,7,8,9,10};对于上述的有序数组,线性查找时,当我们想查询的数为1时,此时索引正好为0,但是我们想查询的目标数为10的时候,此时我们需要遍历的
数组:定义在连续内存空间上的相同类型的元素的集合702.二分查找27.移除元素702.二分查找题目链接:二分查找文章讲解:代码随想录.二分查找视频讲解:手把手带你撕出正确的二分法|二分查找法|二分搜索法|LeetCode:704.二分查找_哔哩哔哩_bilibili二分前提:有序数组,数组中无重复元素方法:结合数组的特征,可以为左闭右闭区间[0,数组长度-1],或者左闭右开区间[0,数组长度)。思考:左开右开区间,左开右闭区间,会怎样?小细节:1.加减运算符优先级高于位移运算符2.求两个数的中间值:mid=start+(end-start>>1)intsearch(int*nums,intnu
代码随想录算法训练营第一天|704.二分查找、27.移除元素数组理论基础一维数组二维数组704.二分查找:computer:左闭右闭写法:computer:左闭右开写法:eyes:题目总结:eyes:27.移除元素:computer:暴力解法:computer:双指针法(快慢指针法)同向相向:eyes:题目总结:eyes::balloon:心得收获数组理论基础一维数组数组是存放在连续内存空间上的相同类型数据的集合数组下标都是从0开始的数组内存空间的地址是连续的vector和array的区别:vector的底层实现是array,严格来讲vector是容器,不是数组数组的元素是不能删的,只能覆盖二
## LeetCode704-二分查找-题目描述:给定一个n个元素有序的(升序)整型数组nums和一个目标值target,-写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。给定一个n个元素有序的(升序)整型数组nums和一个目标值target ,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。-题目链接:leetcode.cn/problems/bi…-解题思路: 用二分法。从中间开始查找,根据target值的大小改变left和right的值-二分法使用条件:1.查找的是有序的数组2.没有重复的元素方法1: 左闭右闭区间[left,r
704、二分查找写在之前:之前一直是在用牛客刷题,突然用力扣没了智能提示还有点不习惯,慢慢来吧(吐槽:力扣调试还要升级会员,牛客不要,不过这也可以让我自己学会如何使用自己的编译器进行调试)思路:很明显的使用二分法来回答此题目,用暴力法也可解决,最开始的思路则是额外写一个二分法函数直接进行调用。其中个人认为需要注意的点是边界的处理,我最一开始便是没有注意到边界条件的处理导致了时间超限和解答错误,例如nums[mid]和target比较之后的left或者right是直接等于mid还是要加1或者减1,如果这里没有处理好则一些特殊情况会不正确,我其实并没有在错误后选择改正边界条件的判断,而是选择直接先
704.二分查找题目链接:力扣文档讲解:代码随想录视频讲解:https://www.bilibili.com/video/BV1fA4y1o7151.解题思路 二分查找明确思路前首先要明确区间,根据查找区间不同,有两种常见的解题方式,左闭右开[left,right]和左闭右闭[left,right)。 2.代码实现2.1左闭右闭intsearch(vector&nums,inttarget){//左闭右闭intnRight=nums.size()-1;intnLeft=0;intnMid=0;while(nLefttarget){nRight=nMid-1;}elseif(nums[nM
704.二分查找今日学习的文章链接和视频链接代码随想录● 自己看到题目的第一想法第三次做这道题目,能想起来大概怎么做,但是区间的定义又忘记了,vector的用法也有点模糊。● 看完代码随想录之后的想法 回想起左闭右开和左闭右闭合● 自己实现过程中遇到哪些困难 左闭右闭写出来后忘记middle更新可以简略成一行,并且一开始粗心吧middle的赋值写错了。左闭右开一时间忘记right的初始值没有变成数组最后一位再加意味,导致测试用例中,当数组为1个元素的时候会丢掉右边界。● 今日收获,记录一下自己的学习时长十分钟左右完成,之前刷过两次二分查找,重在回顾。27.移除元素今日学习的文章链接和
LeetCode704二分查找题目链接:704.二分查找-力扣(LeetCode)视频链接:手把手带你撕出正确的二分法|二分查找法|二分搜索法|LeetCode:704.二分查找_哔哩哔哩_bilibili思路看到题中说有序数组,还强调无重复元素,那么第一反应就是想想可否用二分法。而二分法做容易出错的地方就是边界条件,对区间的定义没有搞清楚。通常写二分法时对区间的定义有两种,第一种:[L,R](左闭右闭)、第二种:[L,R)(左闭右开),也会有极少数人使用左开右闭的写法。第一种写法:[L,R](左闭右闭)首先我们定义一个target在一个左闭右闭的区间里(这里应该知道的是:区间的定义决定了代码
704二分查找题目链接:二分查找文章讲解:704.二分查找视频讲解:手把手带你撕出正确的二分法|二分查找法|二分搜索法|LeetCode:704.二分查找_哔哩哔哩_bilibili思路前提:数组为有序数组,数组中无重复元素(看到这个条件可以去想二分法)两种方法:左闭右闭即[left,right],或者左闭右开即[left,right)第一种写法定义target在一个左闭右闭的区间里,[left,right]while(leftif(nums[middle]>target)right要赋值为middle-1,因为当前这个nums[middle]一定不是target,那么接下来要查找的左区间结束
文章目录704二分查找:题目链接解题思路:暴力循环:自己的思路二分查找:实现代码:错误解法:题目总结:二分版本一、二的区别:27.移除元素:题目链接解题思路:暴力循环:自己的标记排序:自己的双指针:别人的实现代码:错误解法:题目总结:704二分查找:题目链接解题思路:暴力循环:自己的思路从左往右,遍历每个元素。检查当前元素是否满足要求。若满足要求则返回当前元素的下标。时间复杂度:O(n);空间复杂度:O(n);二分查找:题目给定的是一个升序的数组,即有序数组!那么二分的前提是有序(或者具有某种特殊的性质!)。故可以采用二分。每次二分出来一个中间元素,然后将中间元素和target进行一个比较。若