题目一 移除元素:
题目要求:
- 给你一个数组 nums 和一个值 val。
- 你需要 原地 除所有数值等于 val 的素,并返回移除后数组的新长度.不要使用额外的数组空间。
- 你必须仅使用 0(1) 额外空间并 原地 修改输入数组元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
注意最后返回的是新数组的长度!
图例:
注意,本题要求:不要使用额外的数组空间。
如上图中情况,我们使用双指针解法
图例:
起始:
开始遍历数组,src指向的数据为val,所以进行src++
src指向的数据不是val,把src指向的数据交给dst所在的位置
随后src和dst都++
如此遍历下去,直到src越界或者遍历结束最后返回dst
代码输入:
nums是数组名 numsSize是数组大小 val是需要删除的数据,最后返回dst
题目二 合并两个有序数组:
题目内容:
- 给你两个按非递减顺序排列的整数数组 nums1 和 nums2,另有两个整数 m和n分别表示 nums1 和 nums2 中的元素数目。
- 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序排列
注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。
为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后n 个元素为 0 ,应忽略。 nums2 的长度为 n 。
举例:
- 做法:定义三个指针,第一个和第二个分别在数组1数组2的最后一位有效数据的位置数,而第三个指针放在第一个数组的末端位置
- 随后开始指针1和指针2的向前循环遍历比较,在二者指向的数据中,数据大的往指针三所指向的位置进行存放
- 存放完毕后,被存放的那个数据所代表的指针往前移,没有被存放的数据继续进行比较
- 同时指针3朝前移动
- 能怎么做的原因:两个按非递减(递增)顺序排列的整数数组 nums1 和 nums2
图例:
初始:
相互比较 6 更大进行指针3的插入
同时指针3往前移,6所代表的指针1也往前移
并且指针2所指的数据再次和指针1所指的数据继续比较
指针1和指针3再度往前移动,再度比较和移动后
指针1越界了,因为指针一越界,且因为两个数组本质起始是从小到大进行排列,所以指针3指向的位置接下来就应该存放指针2指向的数据,然后二者走完遍历结束
代码输入:
- l1=m-1 , l2=n-1 二者分别指向最后一位有效数据(有效数据相当于数组大小)
- m+n是空间大小,但在这里是数组1的大小
同时这里只有2种情况,那就是数组2走完了,数组1没走完,但是呢数组1和数组2的数据全部是放在数组1中的,数组2走完也是表明数组2的数据是比数组1内的数据都大所以放在数组1的后排,而数组1走完表明数组1比数组2的数据都大,所以数组2的数据需要放在在数组1的前排