👑个人主页:啊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--;}
}
感谢阅读,如果对你有帮助的话,三连支持一下吧😘