智障小菜鸡入门卡玛网kamacode算法训练营的第一天 | 704. 二分查找、27. 移除元素、977.有序数组的平方
大家好,本人是智障小菜鸡,今天是小菜鸡开学的日子,那么首先来看一下今天的题目吧。
今日任务
详细布置
数组理论基础
文章链接:https://programmercarl.com/%E6%95%B0%E7%BB%84%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html
题目建议: 了解一下数组基础,以及数组的内存空间地址,数组也没那么简单。
- 二分查找
题目建议: 大家今天能把 704.二分查找 彻底掌握就可以,至于 35.搜索插入位置 和 34. 在排序数组中查找元素的第一个和最后一个位置
,如果有时间就去看一下,没时间可以先不看,二刷的时候在看。先把 704写熟练,要熟悉 根据 左闭右开,左闭右闭 两种区间规则 写出来的二分法。
题目链接:https://leetcode.cn/problems/binary-search/
文章讲解:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html
视频讲解:https://www.bilibili.com/video/BV1fA4y1o715
- 移除元素
题目建议: 暴力的解法,可以锻炼一下我们的代码实现能力,建议先把暴力写法写一遍。 双指针法
是本题的精髓,今日需要掌握,至于拓展题目可以先不看。题目链接:https://leetcode.cn/problems/remove-element/
文章讲解:https://programmercarl.com/0027.%E7%A7%BB%E9%99%A4%E5%85%83%E7%B4%A0.html
视频讲解:https://www.bilibili.com/video/BV12A4y1Z7LP977.有序数组的平方
题目建议: 本题关键在于理解双指针思想
题目链接:https://leetcode.cn/problems/squares-of-a-sorted-array/
文章讲解:https://programmercarl.com/0977.%E6%9C%89%E5%BA%8F%E6%95%B0%E7%BB%84%E7%9A%84%E5%B9%B3%E6%96%B9.html 视频讲解: https://www.bilibili.com/video/BV1QB4y1D7ep
二分查找模板
首先要理解二分查找的模板,有两个点需要注意:
- while循环的条件是什么?
- 更新mid该怎么更新?
那么这两点都是坚持一个原则:循环不变量原则。非常的amazing,具体可以去看看卡哥的视频课和模板:https://programmercarl.com/0704.%E4%BA%8C%E5%88%86%E6%9F%A5%E6%89%BE.html#%E6%80%9D%E8%B7%AF
移除元素
本题使用快慢指针来解决。慢指针用于写操作,快指针用于读操作。相信这里已经介绍的十分清楚了,有心的读者可以去卡哥的网站看解析。
有序数组的平方
本题是一个比较麻烦的题,
给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。
示例 1:
输入:nums = [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释:平方后,数组变为
[16,1,0,9,100],排序后,数组变为 [0,1,9,16,100] 示例 2:输入:nums = [-7,-3,2,3,11] 输出:[4,9,9,49,121]
难道我们要先挨个平方然后再去排序吗?如果这样做的话时间复杂度是O(nlogn),而且没有利用到题目的一个隐藏条件:“非递减”。这是一个很重要的点。
有没有更好的做法呢,或者说有没有能利用这个隐藏条件的做法呢?双指针可以做到这一点。具体怎么做呢?
拿双指针在两端,哪个满足条件就选哪个,被选中的数放到一个新数组里。这样就成了。所以如果你没有用到题目的所有条件,一定是不够好。
智障小菜鸡今天就先学这么多,明天继续学喽。