刷题阶段性回顾(Day1~30)

Day1合并两个有序数组

题目:给你两个按 非递减顺序 排列的整数数组 nums1nums2,另有两个整数 mn ,分别表示 nums1nums2 中的元素数目。

请你 合并 nums2nums1 中,使合并后的数组同样按 非递减顺序 排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n

回顾解读:
本题关键就是合并后的数组也是有序的,顾设两个指针i,j分别用来遍历nums1和nums2,将其中的较小(或大)者插入到新数组中,同时做插入的数组指针进行移动,不做插入的不移动。

有个关键就是,在循环结束后,可能会存在某个数组中的值还有剩余,此时需要再设置循环,将剩余的值插入的新数组中。

收获:

vector数组的创建方法:vector nums(m + n);

Day2移除元素

题目:给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

回顾解读:
题目要求原地移除,并且补充不需要考虑数组中超出新长度后面的元素。很显然是让我们通过把非val的数移到到val处,最终实现数组尾部都是val的结果。

我的思路遍历数组,遇到val的时候就进行循环从val后第n个元素开始判断,是否是val,是n就自增,不是则交换(实际上赋值也可以)。n设置的是一个不会重置的变量,因为一旦val连续出现,且最终我们会把遇到的第一个非val的数换到i处,所以n的值会永久变大,然后在每次往后找非val的数时,i和n中间的就没必要再遍历了,因为肯定都是val,这个解题思路要优于力扣官方给出的题解。