一.移除元素
力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
题目链接放在这里,有兴趣的小伙伴可以去尝试一下!!!
思路一: 顺序表的删除
我们很容易想到的一个思路就是利用顺序表删除数据的思想,首先遍历整个数组,如果碰到数组的值==val,就将后面的元素都整体向前挪动一个单位,并将numSize--,表示数组的长度减小。
代码实现如下:
这种方法通俗易懂,但是时间复杂度是o(n^2),运行效率比较低,下面我们介绍另一种,只需要一层循环的方法。
思路二:双指针法
整体思路就是用一个走的比较快的指针探路,碰到不是val的值直接赋值给慢指针,碰到val就直接将这个val跳过。
二. 合并两个有序数组
思路一:先合并再排序
这里我用的排序算法是最简单的冒泡排序,大家也可以使用其他一些排序算法!!!
思路二:双指针法的延伸
前一道题是一个数组我们可以采用双指针法,而这道题是两个数组,我们就可以使用三个指针来解决问题。
整体思路:使用两个指针分别指向这两个数组的末尾(注意:这里不能从两个数组的开头开始,因为这样可能会导致有些数据还没有读取就已经被覆盖了)。再用一个指针指向nums1数组的末尾,用来添加合并后数组的数据。
代码实现如下:
总结
通过这两道经典题目,我们要熟练掌握双指针算法的思想!!!