👑个人主页:啊Q闻
🎇收录专栏:《数据结构》
🎉道阻且长,行则将至
前言
嗨呀,今天的博客是关于顺序表的两道题目,是力扣的移除元素和合并有序数组的题目。
一.移除元素
题目为:
思路:
我们采用双指针的方法:
1.定义两个变量:src和dst.将src和dst都指向开始第一个元素
2. 如果src指向的值等于要移除的元素val,我们就让src++.
3.如果src指向的值不等于要移除的元素val时,我们就将src指向的值赋给dst,然后让src++,dst++.
4.最后返回dst.
如图所示:
代码实现:
int removeElement(int* nums, int numsSize, int val) {
int src=0;//定义两个变量
int dst=0;
while(src<numsSize)//遍历寻找val
{
if(nums[src]==val)
{
src++;
}
else
{
nums[dst]=nums[src];
src++;
dst++;
}
}
return dst;
}
2.合并两个有序数组
题目为:
思路:
也有些类似于双指针,特别注意的是,题目要求我们合并后的数组由nums1返回。
代码如下:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
int l1=m-1;
int l2=n-1;
int l3=m+n-1;
while(l1>=0&&l2>=0)//两者都存在时比较,将小的值赋给l3
{
if(nums1[l1]>nums2[l2])
{
nums1[l3]=nums1[l1];
l3--;
l1--;
}
else
{
nums1[l3]=nums2[l2];
l3--;
l2--;
}
}
while(l2>=0)
{
nums1[l3]=nums2[l2];
l3--;
l2--;
}
}
感谢阅读,如果对你有帮助的话,三连支持一下吧😘