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

相关文章
|
存储 SQL Web App开发
SQL实践篇(一):使用WebSQL在H5中存储一个本地数据库
SQL实践篇(一):使用WebSQL在H5中存储一个本地数据库
284 2
|
Java Linux
Linux复制安装 jdk 环境
Linux复制安装 jdk 环境
214 3
|
Java
Java的封装详解
封装是Java中实现数据隐藏和保护的核心机制。它通过将对象的状态和行为结合并限制外部直接访问,确保类的内部细节对外不可见,仅能通过公共方法访问和修改对象状态。封装带来了数据隐藏、提高代码可维护性和增强安全性等好处。在Java中,封装主要通过将属性设为私有并提供getter和setter方法来实现。这种方式不仅保护了数据完整性,还允许在修改类内部实现时不影响外部代码,从而提升程序的健壮性和可读性。
550 80
|
10月前
|
设计模式 Swift iOS开发
探索iOS开发:从基础到高级,打造你的第一款App
【10月更文挑战第40天】在这个数字时代,掌握移动应用开发已成为许多技术爱好者的梦想。本文将带你走进iOS开发的世界,从最基础的概念出发,逐步深入到高级功能实现,最终指导你完成自己的第一款App。无论你是编程新手还是有志于扩展技能的开发者,这篇文章都将为你提供一条清晰的学习路径。让我们一起开始这段旅程吧!
|
缓存 Java 关系型数据库
【超全详解】Maven工程配置与常见问题解决指南
检查Maven配置包括验证路径、设置pom.xml与Project Structure的Java版本。基本操作有`clean-compile`、`install`和`package`,其中`install`会将jar包放入本地仓库。获取他人工程后需修改配置、清除缓存、更新依赖等。配置文件应从Maven Repository找寻,选择稳定高版本。创建Maven工程可选archetype如`quickstart`或直接创建Java工程。基本目录结构遵循分层设计原则,常见问题包括假性导包、端口占用、时区问题等,对应解决方案包括删除本地仓库文件、调整系统设置或重新加载项目。
2282 6
【超全详解】Maven工程配置与常见问题解决指南
|
存储 SQL NoSQL
NoSQL数据库的优点和缺点是什么?
NoSQL数据库的优点和缺点是什么?
616 0
|
传感器 存储 供应链
区块链技术在供应链管理中的应用:去中心化的可追溯性
供应链管理是一个复杂的过程,涉及多个参与方和交易环节。然而,传统的供应链管理存在着信息不对称、可追溯性差以及易于篡改数据等问题。为了解决这些挑战,区块链技术的应用在供应链管理中引起了广泛关注。本文将介绍区块链技术在供应链管理中的应用,重点探讨其带来的去中心化可追溯性的优势。
545 0
|
关系型数据库 数据库 索引
ElasticSearch学习(一):HTTP操作ElasticSearch
为了操作方便,我直接使用了Windows下的ElasticSearch。需要注意的一点是,ElasticSearch8以上的版本是基于java17的。 我使用的是7.6.2的版本。下载好压缩包之后,解压,进入bin目录,双击elasticsearch.bat文件即可启动。
585 0
ElasticSearch学习(一):HTTP操作ElasticSearch
|
API 数据安全/隐私保护
十二、.net core(.NET 6)添加通用的访问webapi的方法(包括HttpClient和HttpWebRequest)
开发通用的访问webapi方法。在common工具文件夹下,新建一个类库项目:Wsk.Core.WebHelper,并引用Package包项目,然后新建一个类HttpClientHelper,用于使用HttpClient方法进行访问webapi:
991 0
十二、.net core(.NET 6)添加通用的访问webapi的方法(包括HttpClient和HttpWebRequest)
|
存储 缓存 监控
一文带你吃透Redis
一文带你吃透Redis
388 0