@代码随想录算法训练营第1天 | Leetcode704 二分查找, 27 移除元素
704 二分查找
视频链接: https://www.bilibili.com/video/BV1fA4y1o715
第一遍读题思考(五分钟内,如果没有思路就写暴力解法思路,暴力解法思路也不清晰就写无)
本题是在一个升序数组中寻找某个特定的值。初始的想法就是涉及到一个while循环,循环的离开条件就是找到目标值,或者搜索空间长度为1.
- 在循环里,首先用数组(搜索空间)中值与目标数字做比较:
- 如果数组长度为1,直接比较并返回result或者-1
- 如果等于:result += 搜索空间长度的一半减1作为下标,返回result。
- 如果中值小于目标:则搜索空间变为原始数组的右半边,如果原始搜索空间长度是偶数,则包括中值(左闭),result += len(原数组)/2。如果是奇数,则不包括中值(左开),result += len(原数组)/2 + 1。返回第一步。
- 如果中值大于目标:则搜索空间变为原始数组的右半边,如果原始搜索空间长度是偶数,则包括中值(左闭)。如果是奇数,则不包括中值(左开)。两种情况result += 0。返回第一步。
代码随想录解法思路
从左闭右闭或者左闭右开的思路处理二分法,推出循环的条件更简洁,通过left<=right or left < right即可。也不需要对result进行多重判断,直接返回middle即可。具体思路就是直接用left和right去定义搜索空间,然后进入while循环找中值判断,基于左闭右闭或者左闭右开的原则进行left或者right的重新赋值。主要注意的有两点,一个是在while循环的时候要根据[]或者[)的原则判断left<=right或者left<right是否是合法区间。第二个点在与比完大小后,赋值给left或者right的时候是否包含middle,如果是[ ]就不需要包含,因为middle已经比较过了。如果是[ )就需要包含。
c++代码具体实现注意事项
实际编写的时候遇到超出时间限制这个错误,发现是在每次循环中。middle的赋值都是用的nums.size()/2,但实际上应该使用left与right加和的一半作为middle。

学习时长
30分钟
27 移除元素
*文章链接:*https://www.bilibili.com/video/BV12A4y1Z7LP
第一遍读题思考(五分钟内,如果没有思路就写暴力解法思路,暴力解法思路也不清晰就写无)
因为之前看过类似的题,大概知道是双指针法,但是具体操作不清楚。
代码随想录解法思路
快慢双指针,两个指针从同一位置出发(数组头部)。检查快指针的值是否是需要删除
最低0.47元/天 解锁文章
1413

被折叠的 条评论
为什么被折叠?



