本文介绍的是两道顺序表经典算法题目。
移除元素
(来源:LeetCode)
题目
分析
我们很容易想到的办法是去申请一个新的数组,遍历原数组不等于val就把它拿到新数组里。但是题目的要求是不使用额外空间,所以这种方法我们无法使用。
现在我们还有一种很好的方法:双指针法(其实是两个变量)。我们定义两个变量src(源数据),dst(目标数据)。若src指向的值为val,则src++,若src指向的值不是val,将nums[dst]=nums[src],让src++,dst++。
代码参考
合并两个有序数组
题目
分析
我们需要得到的是将num2合并到num1后的总递增数组。nums1的数组长度已经预留了num2元素的个数。
思路1:将num2中数据依次放入到num1数组的后面,用排序算法对num1排序。但是效率低下的排序算法会影响整体的运行效率。
思路2:创建三个变量l1、l2、l3,分别指向nums1最后一个有效元素、nums2最后一个元素以及nums1中最后一个位置。比较l1和l2指向的有效元素,把大的那一个放到l3指向的位置,然后向前走,保证把大的往后放。l1或者l2都有可能先遍历完,只需要处理l1先遍历完的情况(因为说明num2元素没放完到nums1中)。
代码参考
本文结束,感谢阅读^_^