顺序表经典算法(+OJ刷题)

文章目录

  • 一、移除元素
  •    1.常规思路
  •    2.双指针法
  • 二、合并两个有序数组
    • 1.先合并再排序
    • 2.双指针法延伸
  • 总结

一.移除元素

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

题目链接放在这里,有兴趣的小伙伴可以去尝试一下!!!

顺序表经典算法(+OJ刷题)_第1张图片

顺序表经典算法(+OJ刷题)_第2张图片

思路一: 顺序表的删除

我们很容易想到的一个思路就是利用顺序表删除数据的思想,首先遍历整个数组,如果碰到数组的值==val,就将后面的元素都整体向前挪动一个单位,并将numSize--,表示数组的长度减小。

代码实现如下:

顺序表经典算法(+OJ刷题)_第3张图片

这种方法通俗易懂,但是时间复杂度是o(n^2),运行效率比较低,下面我们介绍另一种,只需要一层循环的方法。 

 思路二:双指针法

整体思路就是用一个走的比较快的指针探路,碰到不是val的值直接赋值给慢指针,碰到val就直接将这个val跳过。

顺序表经典算法(+OJ刷题)_第4张图片

二. 合并两个有序数组

顺序表经典算法(+OJ刷题)_第5张图片

思路一:先合并再排序

顺序表经典算法(+OJ刷题)_第6张图片

 这里我用的排序算法是最简单的冒泡排序,大家也可以使用其他一些排序算法!!!

思路二:双指针法的延伸

前一道题是一个数组我们可以采用双指针法,而这道题是两个数组,我们就可以使用三个指针来解决问题。

整体思路:使用两个指针分别指向这两个数组的末尾(注意:这里不能从两个数组的开头开始,因为这样可能会导致有些数据还没有读取就已经被覆盖了)。再用一个指针指向nums1数组的末尾,用来添加合并后数组的数据。

代码实现如下:

顺序表经典算法(+OJ刷题)_第7张图片


总结

通过这两道经典题目,我们要熟练掌握双指针算法的思想!!!

你可能感兴趣的:(数据结构,算法,c++,c语言,数据结构,leetcode)