力扣阶段性总结(1~30)
刷题阶段性回顾(Day1~30)
Day1合并两个有序数组
题目:给你两个按 非递减顺序 排列的整数数组 nums1
和 nums2
,另有两个整数 m
和 n
,分别表示 nums1
和 nums2
中的元素数目。
请你 合并 nums2
到 nums1
中,使合并后的数组同样按 非递减顺序 排列。
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1
中。为了应对这种情况,nums1
的初始长度为 m + n
,其中前 m
个元素表示应合并的元素,后 n
个元素为 0
,应忽略。nums2
的长度为 n
。
回顾解读:
本题关键就是合并后的数组也是有序的,顾设两个指针i,j分别用来遍历nums1和nums2,将其中的较小(或大)者插入到新数组中,同时做插入的数组指针进行移动,不做插入的不移动。
有个关键就是,在循环结束后,可能会存在某个数组中的值还有剩余,此时需要再设置循环,将剩余的值插入的新数组中。
收获:
vector数组的创建方法:vector
Day2移除元素
题目:给你一个数组 nums
和一个值 val
,你需要 原地 移除所有数值等于 val
的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1)
额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
回顾解读:
题目要求原地移除,并且补充不需要考虑数组中超出新长度后面的元素。很显然是让我们通过把非val的数移到到val处,最终实现数组尾部都是val的结果。
我的思路遍历数组,遇到val的时候就进行循环从val后第n个元素开始判断,是否是val,是n就自增,不是则交换(实际上赋值也可以)。n设置的是一个不会重置的变量,因为一旦val连续出现,且最终我们会把遇到的第一个非val的数换到i处,所以n的值会永久变大,然后在每次往后找非val的数时,i和n中间的就没必要再遍历了,因为肯定都是val,这个解题思路要优于力扣官方给出的题解。