一、合并两个有序数组
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
int end=m+n-1;//指向nums1的最后一个位置,从最后一个位置开始存放,它一定是最大的。
int i=m-1,j=n-1;//i表示第一个数组,j表示第二个数组
while(i>=0&&j>=0)
{
if(nums1[i]>nums2[j])
{
nums1[end]=nums1[i];
--i;//向前查找
}
else
{
nums1[end]=nums2[j];
--j;
}
--end;
}
//当第二个数组查完退出时不需要做什么,但如果是第一个数组查完退出,需要第二组的数据拷贝到第一组
if(i<0)
{
while(j>=0)
{
nums1[end]=nums2[j];
--j;
--end;
}
}
}
二、删除有序数组中的重复项
int removeDuplicates(int* nums, int numsSize)
{
//如果数组为空则返回0
if(numsSize==0)
return 0;
int begin=0,end=0;
int i=1;//直接从数组第二个位置开始,第一个位置不需要改变
while(end<numsSize)
{
//找到与begin不同的数就停止
while(end<numsSize && nums[end]==nums[begin])
{
++end;
}
if(end==numsSize)
{
//查找到最后一个,退出
break;
}
//遇到不相等的就赋值
if(nums[end]!=nums[begin])
{
nums[i]=nums[end];
++i;
}
//将end赋值给begin,重新开始查找到第一个不同的数
begin=end;
}
return i;
}
三、移除元素
思路:将数组中要删除的元素用后面的元素覆盖掉
移除元素.
int removeElement(int* nums, int numsSize, int val){
int src = 0;
int dst = 0;
while(src < numsSize)
{
// 将数组中不等于val的值依次挪动到数组的开始位置
if(nums[src] != val)
{
nums[dst] = nums[src];
src++;
dst++;
}
else
{
//如果是被删除的元素,直接++src位置,找到第一个不是val的位置
src++;
}
}
return dst;
}