![在这里插入图片描述](https://img-blog.csdnimg.cn/bc8c68fad1184688acb46a3efbed2a75.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA57yW56iLU0hBUkU=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
![在这里插入图片描述](https://img-blog.csdnimg.cn/741b81c51f68408eb9a69474e37dca66.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/05b8498a82b34eee9ffa09fb03b70d77.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA57yW56iLU0hBUkU=,size_20,color_FFFFFF,t_70,g_se,x_16)
解题思路
![在这里插入图片描述](https://img-blog.csdnimg.cn/eb476f040e464b1a9a5ff7168dcf501c.png)
数组里面的元素都是大于0的,那么我们的思路就是,遍历整个数组。查找到为删除的值和元素的相等时,后面的不为相等的进行覆盖。 时间复杂度O(n),空间复杂度O(1) ![在这里插入图片描述](https://img-blog.csdnimg.cn/7fa214aeaee04e2f9e4d1696842ef7f9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA57yW56iLU0hBUkU=,size_20,color_FFFFFF,t_70,g_se,x_16)
代码
int removeElement(int* nums, int numsSize, int val){
int i=0,j=0;
for(i=0;i<numsSize;i++)
{
if(nums[i]==val)
{
continue;
}
nums[j++]=nums[i];
}
return j;
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/f596785355834ec3a1977f84c608bb07.png) ![在这里插入图片描述](https://img-blog.csdnimg.cn/2978fabfb30e464daadf88db660abaf4.png)
解题思路
思路1:
再次开辟一个空间为m+n的数组,将nums1 数组的里面的元素分别与nums2 里面的元素比较,直达其中一个数组里面的元素全部拷贝到新开辟的数组中,然后把另一个数组剩下的元素拷贝到新的数组中。最后把新开辟数组拷贝到nums1 中。 时间复杂度O(m+n),空间复杂度O(m+n)
思路2:
比较两个数组最大的元素,也就是从后往前遍历,较大的插入到nums1 后面,直到其中一个数组遍历完成。 时间复杂度O(m+n),空间复杂度O(1)
代码
思路1代码
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int* num=(int*)malloc(nums1Size*sizeof(int));
if(num==NULL)
return;
int i=0,j=0,x=0;
for(i=0;i<m;i++)
{
for(;j<n;j++)
{
if(nums1[i]>nums2[j])
{
num[x++]=nums2[j];
}
else
{
num[x++]=nums1[i];
break;
}
}
if(j==n)
num[x++]=nums1[i];
}
if(i==m)
while(j<n)
{
num[x++]=nums2[j++];
}
for(i=0;i<nums1Size;i++)
{
nums1[i]=num[i];
}
free(num);
num=NULL;
}
思路2代码 注意边界
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){
int a,b,c;
a=m-1;
b=n-1;
c=nums1Size-1;
while(a!=-1&&b!=-1)
{
if(nums1[a]>nums2[b])
{
nums1[c--]=nums1[a--];
}
else
{
nums1[c--]=nums2[b--];
}
}
if(a==-1)
while(b!=-1)
{
nums1[c--]=nums2[b--];
}
}
![在这里插入图片描述](https://img-blog.csdnimg.cn/22a07852c95d4b259666a27592348f9e.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBA57yW56iLU0hBUkU=,size_20,color_FFFFFF,t_70,g_se,x_16#pic_center)
|