1.删除有序数组中的重复项
原题链接:https://leetcode.cn/problems/remove-duplicates-from-sorted-array/
思路:使用双指针算法可以使时间复杂度达到O(1).
具体过程:(以画图解释)'
代码实现:
int removeDuplicates(int* nums, int numsSize) { if(numsSize==0) return 0; int i=0,j=1; int dst=0; while(j<numsSize) { if(nums[i]==nums[j]) { ++j; } else { nums[dst]=nums[i]; dst++; i=j; j++; } } nums[dst]=nums[i]; dst++; return dst; }
2.合并两个有序数组
原题链接:https://leetcode.cn/problems/merge-sorted-array/
思路:双指针算法
实现过程:
定义两个变量end1,end2 ,分别指向两个数组的最后一个元素
比较num1[end1]和num2[end2]的大小,将较大值依次移到数组一,从后往前进行
如下图:
代码实现:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) { int end1=m-1,end2=n-1; int end=m+n-1; while(end1>=0&&end2>=0) { if(nums1[end1]>nums2[end2]) { nums1[end--]=nums1[end1--]; } else { nums1[end--]=nums2[end2--]; } } while(end2>=0) { nums1[end--]=nums2[end2--]; } }