二分查找 & 移除元素 & 有序数组的平方
约 487 个字 135 行代码 预计阅读时间 3 分钟
Luck
荣幸在B站24.01-24抽奖中了Carl哥的算法训练营!(😆) → 参考网站
陆陆续续学过一些算法,争取坚持系统学一遍!
24.12.25-B站抽奖那么幸运又中了
上次打卡到DP太难,遂放弃,作为算法菜鸟希望这次尽可能坚持!
PS: 准备这次用Java,虽然主要是算法思想并没太大的区别
- 但因为也快秋招了,为了最后起码能保底拿个offer,思来想去还是Java可能更合适一些
(即便很想研究C++,但感觉时间很不够了,论文还没弄出来而且C++基础并没很好,最重要的C++就业门槛更高一些,而Java开发选择面更广一些,甚至银行等国企可能还有机会)
704.二分查找
第一想法:暴力求呗,因为是升序的,直接循环找即可
1 2 3 4 5 6 7 |
|
1 2 3 4 5 6 7 8 9 10 11 |
|
但题目是 二分查找 呀!而且数组有序,定考虑二分 (区间要注意!)
1 2 3 4 5 6 7 8 9 10 11 12 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
27.移除元素
原地移除等于val
的元素 & 空间要求\(O(1)\),最终返回新的数组长度
原地如何移除?数组元素能删除? → NO,本质即 覆盖 呗!
- 想法: 暴力 → 循环找到目标val,循环后一个先前进行覆盖
1 2 3 4 5 6 7 8 9 10 11 12 13 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
|
快指针来索引新数组需要的元素,更新到慢指针索引上,最终返回慢指针即可(太强了!!!
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 8 9 10 |
|
977.有序数组的平方
第一想法: 对每个数进行平方,然后排序即可
1 2 3 4 5 6 7 8 |
|
1 2 3 4 5 6 7 |
|
时间复杂度: \(O(n + nlogn)\)
2.双指针 → 因为有序,最大值必在两端,两边扫描比较,开个数组,空间换时间(动图)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|