自学内容网 自学内容网

【C语言】顺序表经典算法

本文介绍的是两道顺序表经典算法题目。

移除元素

(来源: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中)。

代码参考

 

本文结束,感谢阅读^_^


原文地址:https://blog.csdn.net/2301_82135086/article/details/140156843

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!