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--移除元素&&删除重复项&&合并两个有序数组
104 0
|
4月前
|
机器学习/深度学习 算法
【刷题记录】合并两个有序数组、移除元素
【刷题记录】合并两个有序数组、移除元素
|
4月前
|
算法
LeetCode第27题移除元素
这篇文章介绍了LeetCode第27题"移除元素"的解题方法,通过使用双指针技巧,有效移除数组中特定值的元素并返回新数组的长度。
|
7月前
|
存储
力扣 合并两个有序数列||移除元素
力扣 合并两个有序数列||移除元素
44 0
删除有序链表中重复的元素-II(链表)
双指针,slow和fast,并且增加标记flag初始为1。
49 0
移除元素、合并两个有序数组(leetcode)
移除元素、合并两个有序数组(leetcode)
|
算法 C++
移除元素:原地去除特定元素的神奇操作
在本篇文章中,我们将探讨题目 "移除元素",要求在给定一个数组 nums 和一个值 val 的情况下,原地移除所有数值等于 val 的元素,并返回移除后数组的新长度。我们将会深入解析如何使用双指针技巧,实现一个高效的算法来解决这个问题。
116 0
27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组(双指针遍历)上
27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组(双指针遍历)上
62 1