1.题目链接:
T1:LINK
T2:LINK
2.详解思路:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
int end1 = m - 1;
int 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--];
}
}
//当end1或者end2小于0了就跳出循环了,就会出现两种局面
//局面1:end1为0但是end2不为0,这时候只需要把nums2中剩下的数据搬到nums1即可
if(end1<0&&end2>=0)
{
int i = 0;
for(i = end2;i>=0;i--)
{
nums1[end--] = nums2[i];
}
}
//局面2:end1不为0但是end2为0,那就不用管了,刚好满足题目
}
int removeElement(int* nums, int numsSize, int val) {
int i = 0;
int p1 = 0;//探路者
int p2 = 0;//守家者
for(i = 0;i<numsSize;i++)
{
if(nums[p1]==val)
{
p1++;
}
else
{
nums[p2++] = nums[p1++];
}
}
return p2;
}
完。