//练习1
//给定数组,移除等于val的数
//例如:nums[]={ 2, 2, 3, 3},val = 3;
//移除后:nums[]={ 2, 2};
int removeElement(int* nums, int numsSize, int val)
{
int src = 0;
int dst = 0;
while (src < numsSize)
{
if (nums[src] != val)
{
nums[dst] = nums[src];
dst++;
}
src++;
}
return dst;
}
3.2 练习2---删除有序数组中的重复项
举个简单的例子
c复制代码
//练习2
//删除有序数组的重复项
int removeDuplicates(int* nums, int numsSize)
{
int dst = 0;
int src = dst + 1;
while (src < numsSize)
{
if (nums[src] != nums[dst])
{
dst++;
nums[dst] = nums[src];
src++;
}
else
src++;
}
return dst + 1;
}
//优化
int removeDuplicates(int* nums, int numsSize)
{
int dst = 0;
int src = dst + 1;
while (src < numsSize)
{
if (nums[src] != nums[dst])
{
dst++;
if (src != dst)
{
nums[dst] = nums[src];
}
}
src++;
}
return dst + 1;
}
3.3 练习3---合并有序数组
拿思路2举个简单的例子
另外还需要考虑一个问题
c复制代码
//练习3:合并有序数组
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
int src = m - 1;
int dst = n - 1;
int index = m + n - 1;
while (src >= 0 && dst >= 0)
{
if (nums1[src] > nums2[dst])
nums1[index--] = nums1[src--];
else
nums1[index--] = nums2[dst--];
}
//若nums2数组元素在src越界后还未全部放入
while (dst >= 0)
nums1[index--] = nums2[dst--];
}