27. 移除元素 88. 合并两个有序数组

简介: 27. 移除元素 88. 合并两个有序数组

27. 移除元素

解题思路

数组里面的元素都是大于0的,那么我们的思路就是,遍历整个数组。查找到为删除的值和元素的相等时,后面的不为相等的进行覆盖。

时间复杂度O(n),空间复杂度O(1)

代码

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;
}

88. 合并两个有序数组

解题思路

思路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--];
    }
}

相关文章
|
存储
顺序表oj--移除元素&&删除重复项&&合并两个有序数组
顺序表oj--移除元素&&删除重复项&&合并两个有序数组
|
1月前
|
机器学习/深度学习 算法
【刷题记录】合并两个有序数组、移除元素
【刷题记录】合并两个有序数组、移除元素
|
1月前
|
算法
LeetCode第27题移除元素
这篇文章介绍了LeetCode第27题"移除元素"的解题方法,通过使用双指针技巧,有效移除数组中特定值的元素并返回新数组的长度。
|
4月前
|
存储
力扣 合并两个有序数列||移除元素
力扣 合并两个有序数列||移除元素
34 0
|
4月前
|
Java C++ Python
leetcode-27:移除元素
leetcode-27:移除元素
42 0
移除元素、合并两个有序数组(leetcode)
移除元素、合并两个有序数组(leetcode)
|
10月前
27.移除元素(LeetCode)
27.移除元素(LeetCode)
27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组(双指针遍历)上
27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组(双指针遍历)上
57 1
|
算法 安全 Swift
LeetCode - #27 移除元素
不积跬步,无以至千里;不积小流,无以成江海,Swift社区 伴你前行。如果大家有建议和意见欢迎在文末留言,我们会尽力满足大家的需求。