Leetcode—移除元素、删除有序数组中的重复项、合并两个有序数组

news2024/12/23 9:54:04

移除元素

在这里插入图片描述
此题简单,用双指针方法即可,
如果右指针指向的元素不等于val,它一定是输出数组的一个元素,我们就将右指针指向的元素复制到左指针位置,然后将左右指针同时右移;
如果右指针指向的元素等于 val,它不能在输出数组里,此时左指针不动,右指针右移一位。
在这里插入图片描述

且最后需要输出的数组长度就是left的值。不多说,上代码:

int removeElement(int* nums, int numsSize, int val)
{
    int left =0;
    int right =0;
    for(int i =0;i<numsSize;i++)
    {
        if(nums[right] != val)
        {
            nums[left]=nums[right];
            ++left;
            ++right;
        }
        else
        {
            ++right;
        }
    }
    return left;

}

时间复杂度:O(N)
空间复杂度:O(1)

删除有序数组中的重复项

在这里插入图片描述

暴力想法

(注意是暴力想法,不是暴力解法!)
作为直男直接就是想实现。
直接遍历,看题目是已经确定了是有序的,遇到与上一个不相等的直接给他拿到新的数组里面存起来。遍历完直接新数组就是答案。
看样子是很接近了哈!毕竟属于简单的题目。但是, O(1) 额外空间的条件下完成这个是我们跨不过去的坎。既然如此那就得考虑在原数组上操作。

双指针法

定义两个指针fast 和 slow 分别为快指针和慢指针,快指针表示遍历数组到达的下标位置,慢指针表示下一个不同元素要填入的下标位置,初始时两个指针都指向下标 1。
假设数组nums 的长度为 n。将快指针 fast 依次遍历从 1 到 n-1 的每个位置,对于每个位置,如果nums[fast] !=nums[fast-1],说明 nums[fast] 和之前的元素都不同,因此将 nums[fast] 的值复制到nums[slow],然后将 slow 的值加 1,即指向下一个位置。遍历结束之后,从 nums[0] 到 nums[slow−1] 的每个元素都不相同且包含原数组中的每个不同的元素,因此新的长度即为 slow,返回 slow 即可。
在这里插入图片描述

//C
int removeDuplicates(int* nums, int numsSize)
{
    int right =1;
    int left =1;
    for(int i=1;i<numsSize;i++)
    {
        if(nums[right-1]!=nums[right])
        {
            nums[left]=nums[right];
            ++left;
            ++right;
        }
        else
        {
            ++right;
        }
    }
    return left;
}

合并两个有序数组

在这里插入图片描述

方法一:直接合并后排序

最直观的方法是先将数组 nums 2放进数组nums 1的尾部,然后直接对整个数组进行排序。

int cmp(int* a, int* b) {
    return *a - *b;
}
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n) {
    for (int i = 0; i != n; ++i) {
        nums1[m + i] = nums2[i];
    }
    qsort(nums1, nums1Size, sizeof(int), cmp);
}

时间复杂度:O((m+n)\log(m+n))
空间复杂度:O(log(m+n))

方法二:逆向双指针

观察可知,nums 1 的后半部分是空的,可以直接覆盖而不会影响结果。因此可以指针设置为从后向前遍历,每次取两者之中的较大者放进 nums 1的最后面。

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--];
        }
    }
    while(end2 >=0)
    {
        nums1[end--] = nums2[end2--];
    }

}

时间复杂度:O(m+n)
空间复杂度:O(1)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/344360.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

04 OpenCV位平面分解

1 基本概念 位平面分解的核心思想是将图像的每一个像素分解为多个二进制位&#xff0c;分别存储在不同的位平面上。例如&#xff0c;如果一个图像是8位深度的&#xff0c;则可以分解为8个位平面&#xff0c;每个位平面上存储一个二进制位。 位平面分解在图像压缩中有着重要的…

对Node.js 的理解?优缺点?应用场景?

一、是什么 Node.js 是一个开源与跨平台的 JavaScript 运行时环境 在浏览器外运行 V8 JavaScript 引擎&#xff08;Google Chrome 的内核&#xff09;&#xff0c;利用事件驱动、非阻塞和异步输入输出模型等技术提高性能 可以理解为 Node.js 就是一个服务器端的、非阻塞式I/…

中国计算机设计大赛来啦!用飞桨驱动智慧救援机器狗

‍‍中国大学生计算机设计大赛是我国高校面向本科生最早的赛事之一&#xff0c;自2008年开赛至今&#xff0c;一直由教育部高校与计算机相关教指委等或独立或联合主办。大赛的目的是以赛促学、以赛促教、以赛促创&#xff0c;为国家培养德智体美劳全面发展的创新型、复合型、应…

保姆级Vue3+Vite项目实战多布局(下)

写在前面注&#xff1a;本文首发掘金签约专栏&#xff0c;此文为文章同步&#xff01;本文为 Vue3Vite 项目实战系列教程文章第三篇&#xff0c;系列文章建议从头观看效果更佳&#xff0c;大家可关注专栏防走失&#xff01;点个赞再看有助于全文完整阅读&#xff01;此系列文章…

如何在 C++ 应用程序中集成 Spire.XLS for C++

Spire.XLS for C 是一个 Excel 库&#xff0c;供开发人员在任何类型的 C 应用程序中操作 Excel 文档&#xff08;XLS、XLSX、XLSB 和 XLSM&#xff09;。 本文演示了如何以两种不同的方式将 Spire.XLS for C 集成到您的 C 应用程序中。 通过 NuGet 安装Spire.XLS for C通过手动…

一篇文章带你读懂HashMap

HashMap是面试中经常问到的一个知识点,也是判断一个候选人基础是否扎实的标准之一。可见HashMap的掌握是多重要。 一、HashMap源码分析 1、构造函数 让我们先从构造函数说起&#xff0c;HashMap有四个构造方法&#xff0c;别慌 1.1 HashMap() // 1.无参构造方法、// 构造一…

企业数字化转型和升级:架构设计方法与实践

企业架构整体结构图例&#xff1a;企业架构整体结构企业架构整体结构从战略层、规划层、落地层这三层来分别对应企业架构中业务、架构和实施的各种重要活动和产出。业务架构&#xff0c;数据架构&#xff0c;应用架构和技术架构之间的内在逻辑联系:图例&#xff1a;企业架构整体…

什么,Excel竟然听得懂人话!?!

Excel知道我们想干啥&#xff0c;不相信&#xff1f;看下面的案例。“数据格式”列中规定了各种数据元类型的长度、保留位数等&#xff0c;我们需要提取对应的数值作为“字段长度”列。比如an..100取100&#xff0c;n4取4&#xff0c;an..100,3取100&#xff0c;..ul取1000&…

C语言学习笔记-排序算法

选择排序 选择排序&#xff08;Selection sort&#xff09;是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小&#xff08;大&#xff09;元素&#xff0c;存放到排序序列的起始位置&#xff0c;然后&#xff0c;再从剩余未排序元素中继续寻找最小&…

元宇宙营销面临的三大挑战

元宇宙的营销就像在早期的互联网建立一个网站一样&#xff0c;你没有多少可以向过去借鉴的&#xff0c;这个领域一切都是崭新的。对于一个实验性很强的项目而言&#xff0c;你很难知道要投入多少的时间和资源&#xff0c;而且这个项目也不一定能保障收益以及满足其他的一些关键…

[小记]注入服务进程/跨session注入

最近测试注入遇到一个问题&#xff1a;OpenProcess 失败&#xff0c;报错码&#xff1a;5&#xff0c;没有权限。 问题排查&#xff1a; 1&#xff0c;是否是管理员权限启动程序&#xff1f; 是 2&#xff0c;注入的目标进程有什么特殊&#xff1f; 目标进程是svchost.exe&…

【PyQt】PyQt学习(二)模块介绍+QObject学习

简介 PyQt API 是一组包含大量类和函数的模块。核心模块如下&#xff1a; QtGui&#xff1a;包含了窗口系统、事件处理&#xff08;QEvent&#xff09;、2D 图像&#xff08;QImage&#xff09;、基本绘画、字体&#xff08;QFont&#xff09;和文字类&#xff1b;QtCore&…

02.13:监督学习中的分类问题

今天首先学习了监督学习中的分类问题&#xff0c;跑了两个代码。现在学起来感觉机器学习有很多不同的定理建立了不同的分类器&#xff0c;也就是所谓不同的方法。具体的数学原理我不太清楚。然后不同的应用场景有一个最优的分类器。 值得一提的应该就是终于清晰的明白了精度&am…

IDEA 中使用 Git 图文教程详解

✅作者简介&#xff1a;2022年博客新星 第八。热爱国学的Java后端开发者&#xff0c;修心和技术同步精进。 &#x1f34e;个人主页&#xff1a;Java Fans的博客 &#x1f34a;个人信条&#xff1a;不迁怒&#xff0c;不贰过。小知识&#xff0c;大智慧。 &#x1f49e;当前专栏…

记录一次time_wait与close_wait的检查

框架与语言&#xff1a;php tp6swoole 原因&#xff1a;每隔几天就会出现,redis:Cannot assign requested address 开始想法&#xff0c;谷歌、百度。然后结果都是配置系统参数。比如下面例子 vi /etc/sysctl.confvm.overcommit_memory 1 net.core.somaxconn 6024 net.ip…

记录--数组去重的五种方法

这里给大家分享我在网上总结出来的一些知识&#xff0c;希望对大家有所帮助 前言 您或许会疑惑&#xff0c;网上那么多去重方法&#xff0c;这篇文章还有什么意义&#xff1f; 别着急&#xff0c;这篇文章只节选了简单的&#xff0c;好玩的&#xff0c;古老的&#xff0c;有实际…

内网渗透(二十四)之Windows协议认证和密码抓取-Mimikatz读取sam和lsass获取密码

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

ILSSI国际研讨会将为您呈现六西格玛技术的未来与前景

ILSSI 欢迎世界各地的精益六西格玛专业人士参加即将举行的2023年国际精益六西格玛研讨会&#xff0c;这次研讨会将邀请到世界各地的专家学者&#xff0c;分享他们的专业知识和经验&#xff0c;并就精益六西格玛等相关议题进行探讨和交流。 这是一个绝佳的机会&#xff0c;让您…

Hudi-集成Flink

文章目录集成Flink环境准备sql-client方式启动sql-client插入数据查询数据更新数据流式插入code 方式环境准备代码类型映射核心参数设置去重参数并发参数压缩参数文件大小Hadoop参数内存优化读取方式流读&#xff08;Streaming Query&#xff09;增量读取&#xff08;Increment…

MongoDB简介入门docker安装MongDB,Spring集成MongDB

一、MongoDB简介1、NoSQL简介NoSQL(NoSQL Not Only SQL)&#xff0c;意即反SQL运动&#xff0c;指的是非关系型的数据库&#xff0c;是一项全新的数据库革命性运动&#xff0c;早期就有人提出&#xff0c;发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储…