代码随想录算法训练营第01天 | 704. 二分查找、27. 移除元素。

题目

初见思路

704. 二分查找

以前做过的一道题,但有些忘了。因为数组已经排好序,第一想法是在一个while loop中比较数组中间值和目标值的大小,如果大于就再比较左边区间中间值和目标值的大小 m = m / 2, 如果小于就再比较右边区间中间值和目标值的大小 m = (nums.size() - m) / 2 + m. 因为不太确定什么时候退出while loop, 就把迭代次数设置成了nums.size() / 2. 可以通过小部分测试,但大部分是错的。

27. 移除元素

也是以前做过的一道题,想到了暴力法和快慢指针,想着实现一下快慢指针,但还是写出了两层loop,代码也有错。

更新思路

704. 二分查找

看了代码随想录后明白应该使用左右两个下标l, r, 分别对应当前区间的左右。修改之前的代码,将loop的条件设置为l <= r, 如果l超过了r代表没有对应目标值,就结束loop返回-1。进入loop时更新m的值,更新为当前l, r的中间下标m = (l + r) / 2。中间值等于目标值的话就返回m;大于就将r移至m的左边,r = m - 1, 这样下一个循环时就只在左边的区间比较(比当前nums[m]小);小于中间值,l = m + 1

写的时候没有先更新m 而造成后面的比较都是错误的,上一个循环中更新了l或者r,进入新的循环时应该首先更新m

27. 移除元素

看完代码随想录之后的发现当快指针的值和val不相等时只用增加快指针的值就可以了(跳过相等的值,之后会重新赋值覆盖掉),当不等时,nums[a] = nums[b], 再增加快慢指针。

今日总结

学习时长

2h

收获

数组双指针,快慢指针,注意总结。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值