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

 
数组理论基础 文章链接:代码随想录 

有了代码随想录这样的好社群的契机,开始了时隔好一阵子的刷题。以前一直用java,但工作中不用java很久了。这次准备开封心仪已久的C++,刷题的同时吸收一门想要使用的新语言。

704. 二分查找

 题目链接:. - 力扣(LeetCode)

文章讲解:代码随想录

视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili

题目建议: 大家今天能把 704.二分查找 彻底掌握就可以,至于 35.搜索插入位置 和 34. 在排序数组中查找元素的第一个和最后一个位置 ,如果有时间就去看一下,没时间可以先不看,二刷的时候在看。

先把 704写熟练,要熟悉 根据 左闭右开,左闭右闭 两种区间规则 写出来的二分法

写题的时候发现c++ 和java的写出来还是很像的, 除了签名部分。int[] nums 变为 vector<int>&。严格说来,这样也许更标准。因为java数据结构其实一般都是 HashSet<Integer> 这类格式, 所以其实vector更明确。int[] 大概是java嫌明确了麻烦 要简化什么的(待查证)

c++似乎不会一会儿.length() 一会儿.size()。 上来就都是 .size()。 

java有.length, .length(), .size(),久了不写就会老记错(现在也只记得 基本一点的用.length, 带点数列类结构的 用.length(), 别的.size())

写题时候写的左闭右闭,但又踩坑了,判断while停止写成了 left < right, miss 了终止时候的部分case。

看了视频讲解又扫了一眼文章,意识到可以使用一些区间处理的原则来避免这种情况。因为左闭右闭的时候,left == right 可以包含mid值, 所以while判断一定要包含等于的情况。之后的判断也类似。

同理说来,左闭右开就不需要==, 但值得注意的是开头的right范围是size(), 而不是size() -1。贯彻区间判断的做法。

27. 移除元素

题目建议: 暴力的解法,可以锻炼一下我们的代码实现能力,建议先把暴力写法写一遍。 双指针法 是本题的精髓,今日需要掌握,至于拓展题目可以先不看。

题目链接:. - 力扣(LeetCode)

文章讲解:代码随想录

视频讲解:数组中移除元素并不容易! | LeetCode:27. 移除元素_哔哩哔哩_bilibili

第一反应是想不起来这题目是啥了,数组怎么还能删东西,定睛一看是把要保留的元素挤到前面去然后返回长度。用快慢指针写完了,一下子还想不起来暴力解是如何。看了文章讲解发现是每次检测到target就loop到pin的size完全挪一遍。大致是习惯了快慢指针就回不去了。

截至目前学习大约3小时,查看了各类代码随想录的资料,决定同时也跟随代码随想录学习c++资料,并完成第一天两道题。 感冒错过了第一天的补卡,所以今天再留出完成第二天题目的时间,赶上进度。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值