代码随想录算法训练营打卡第一天

@代码随想录算法训练营第1天 | Leetcode704 二分查找, 27 移除元素

704 二分查找

视频链接: https://www.bilibili.com/video/BV1fA4y1o715

第一遍读题思考(五分钟内,如果没有思路就写暴力解法思路,暴力解法思路也不清晰就写无)

本题是在一个升序数组中寻找某个特定的值。初始的想法就是涉及到一个while循环,循环的离开条件就是找到目标值,或者搜索空间长度为1.

  1. 在循环里,首先用数组(搜索空间)中值与目标数字做比较:
  2. 如果数组长度为1,直接比较并返回result或者-1
  3. 如果等于:result += 搜索空间长度的一半减1作为下标,返回result。
  4. 如果中值小于目标:则搜索空间变为原始数组的右半边,如果原始搜索空间长度是偶数,则包括中值(左闭),result += len(原数组)/2。如果是奇数,则不包括中值(左开),result += len(原数组)/2 + 1。返回第一步。
  5. 如果中值大于目标:则搜索空间变为原始数组的右半边,如果原始搜索空间长度是偶数,则包括中值(左闭)。如果是奇数,则不包括中值(左开)。两种情况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。
solution for 704

学习时长

30分钟

27 移除元素

*文章链接:*https://www.bilibili.com/video/BV12A4y1Z7LP

第一遍读题思考(五分钟内,如果没有思路就写暴力解法思路,暴力解法思路也不清晰就写无)

因为之前看过类似的题,大概知道是双指针法,但是具体操作不清楚。

代码随想录解法思路

快慢双指针,两个指针从同一位置出发(数组头部)。检查快指针的值是否是需要删除

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值