【Leedcode】顺序表必备的三道面试题(附图解)

news2024/11/17 23:57:46

顺序表必备的三道面试题(附图解)


文章目录

  • 顺序表必备的三道面试题(附图解)
  • 前言
  • 一、第一题
    • 1.题目
    • 2.思路+图解
    • 3.源码
  • 二、第二题
    • 1.题目
    • 2.思路+图解
    • 3.源码
  • 三、第三题
    • 1.题目
    • 2.思路+图解
    • 3.源码
  • 总结


前言

本文给大家介绍三道顺序表学习过程中Leedcode上的OJ题!附源码和图解!


一、第一题

1.题目

题目如下(示例):

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

//接口型
int removeElement(int* nums, int numsSize, int val)
{
}

在这里插入图片描述


2.思路+图解

思路一:通过遍历找到所有的val,一次挪动数据覆盖删除(时间复杂度O(N^2)),不符合题意。


能否将时间复杂度变成 O(N) 呢?
思路2:一次遍历nums数组,把不是val的值,放到tmp数组,再把tmp数组的值拷贝回去。如下图
在这里插入图片描述
这样处理的时间复杂度为O(2N)->O(N),空间复杂度O(N)以空间换时间


能否将空间复杂度优化到 O(1) 呢?
思路3:请看图解!
在这里插入图片描述


3.源码

代码如下(示例):

int removeElement(int* nums, int numsSize, int val)
{
    int src=0;
    int dst=0;
    while(src<numsSize)
    {
        if(nums[src]!=val)
        {
            nums[dst]=nums[src];
            src++;
            dst++;
        }
        else
        {
            src++;
        }
    }
    return dst;
}

二、第二题

1.题目

代码如下(示例):

一个升序排列的数组nums,请你原地删除重复出现的元素,使每个元素只出现一次,
返回删除后数组的新长度,元素的 相对顺序应该保持一致

由于在某些语言中不能改变数组的长度,所以必须将结果放在数组nums的第一部分.
更规范地说,如果在删除重复项之后有k个元素,那么nums的前k个元素应该保存最终结果。

将最终结果插入nums的前k个位置后返回k

不要使用额外的空间,你必须在原地修改输入数组并在使用O(1)额外空间的条件下完成。

int removeDuplicates(int* nums, int numsSize)//接口型
{
}

2.思路+图解

思路一:挪动数据,如果有重复的元素,就把重复后的元素前挪一步(时间复杂度:O(N^2)),不符合题意


思路二:再开辟一个数组,如果重复的元素跳过去,把没重复的元素移到新数组里
这样处理的时间复杂度为O(2N)->O(N),空间复杂度O(N) (以空间换时间),不符合题意


思路三:如下图解释!
在这里插入图片描述


3.源码

代码如下(示例):

int removeDuplicates(int* nums, int numsSize)
{
    int i=0;int j=1;int dst=0;
    if(numsSize==0)
    {
        return;
    }
    while(j<numsSize)
    {
        if(nums[i]==nums[j])
        {
            ++j;
        }
        else
        {
            nums[dst]=nums[i];
            ++dst;
            i=j;
            j++;
        }
    }
    nums[dst]=nums[i];
    dst++;
    return dst;
}

三、第三题

1.题目

题目如下(示例):

给你两个按非递减顺序排列的整数数组nums1和nums2,另有两个整数m和n,分别表示nums1和nums2中的元素目。

请你 合并nums2到nums1中,使合并后的数组同样按非递减顺序排列。

注意:最终,合并后数组不应由函数返回,而是存储在数组nums1中。为了应对这种情况,
nums1的初始长度为m + n,其中前m个元素表示应合并的元素,后n个元素为0,应忽略。nums2的长度为n。

void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n)
{
}

2.思路+图解

这里就直接讲最终的思路和解法!如下图图解所示!
在这里插入图片描述


在这里插入图片描述


3.源码

代码如下(示例):

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

总结

以上就是今天要讲的内容,本文介绍了学习顺序表中的三道面试题以及图解+源代码
如果我的博客对你有所帮助记得三连支持一下,感谢大家的支持!
在这里插入图片描述

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

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

相关文章

【项目精选】javaEE土地档案管理系统(源码+论文+视频)

技术&#xff1a;java、jsp、struts、spring、hibernate 数据库&#xff1a;oracle 集成开发工具&#xff1a;eclipse 点击下载源码 本土地项目管理系统在可行性研究的基础上&#xff0c;是为了进一步明确土地项目管理系统的软件需求&#xff0c;以便安排项目规划和进度&#x…

ARM+LINUX嵌入式学习路线

嵌入式学习是一个循序渐进的过程&#xff0c;如果是希望向嵌入式软件方向发展的话&#xff0c;目前最常见的是嵌入式Linux方向&#xff0c;关注这个方向&#xff0c;大概分3个阶段&#xff1a; 1、嵌入式linux上层应用&#xff0c;包括QT的GUI开发 2、嵌入式linux系统开发 3、…

Python|每日一练|字符串|递归|链表|单选记录:字符串转换整数 (atoi)|阶乘后的零| K 个一组翻转链表

1、字符串转换整数 (atoi)&#xff08;字符串&#xff09; 请你来实现一个 myAtoi(string s) 函数&#xff0c;使其能将字符串转换成一个 32 位有符号整数&#xff08;类似 C/C 中的 atoi 函数&#xff09;。 函数 myAtoi(string s) 的算法如下&#xff1a; 读入字符串并丢弃…

Golang 方法笔记

Golang中的方法是作用在指定的数据类型上的&#xff0c;因此自定义类型都可以有方法。方法定义func (recevier type) methodName (参数列表) (返回值列表) {方法体return 返回值}基本申明和调用type A struct {Num int}func (a A) test() {fmt.Println(a.Num)}说明&#xff1a;…

Python快速上手系列--邮件发送--详解篇

本章就来一起学习一下跑完自动化脚本后如何自动的发送邮件到指定的邮箱。zmail操作&#xff1a;1. 导包 import zmail2. 邮件内容&#xff0c;包含&#xff1a;主题(subject)、正文(content_text)、附件(attachments)3. 发件人信息&#xff0c;包含&#xff1a;发件人账号&…

什么牌的运动耳机比较好、运动耳机排行榜10强

现在运动健身的潮流持续不下&#xff0c;而且人们长期坐于办公室办公&#xff0c;严重影响身体的健康&#xff0c;这时不论是去健身房锻炼&#xff0c;还是户外跑步都是非常必要的了&#xff0c;而蓝牙耳机作为运动必备的一款数码产品&#xff0c;更是受到了大家的青睐&#xf…

2023/02/18 ES6对象属性的解读

1 属性的可枚举性和遍历 <script>const obj {userName: zhaoshuai-lc,userAge: 26,userSex: male}let res Object.getOwnPropertyDescriptors(obj);console.log(res); </script>描述对象的 [ enumerable ] 属性, 称为“可枚举性”, 如果该属性为 [ false ], 就表…

如何实现外网访问内网ip?公网端口映射或内网映射来解决

本地搭建服务器应用&#xff0c;在局域网内可以访问&#xff0c;但在外网不能访问。如何实现外网访问内网ip&#xff1f;主要有两种方案&#xff1a;路由器端口映射和快解析内网映射。根据自己本地网络环境&#xff0c;结合是否有公网IP&#xff0c;是否有路由权限&#xff0c;…

0.4如何使用cmake来管理项目

如何使用cmake来管理项目 【opencv源码解析0.1】VS如何优雅的配置opencv环境 【opencv源码解析0.2】如何编译opencv库源码 【opencv源码解析0.3】调试opencv源码以及使用cmake来管理项目 前面几篇文章我们都是围绕Visual Studio 2019这个IDE来展开的&#xff0c;IDE为我们做了…

【OJ】小熊猫的肉质品

&#x1f4da;Description: 自从可爱的小熊猫来到浙商大后便再也不想吃那些膳食纤维了&#xff0c;比如&#xff1a;竹子。所以&#xff0c;骞哥&#xfeff;不得不帮助国宝寻找一些肉类来维持能量&#xff0c;使得小熊猫不至于饿死在全球某工商。但是&#xff0c;你知道的淘…

Spring Cloud Alibaba--seata微服务详解之分布式事务(三)

上篇讲述gateway的部署和使用&#xff0c;gateway统一管理和转发了HTTP请求&#xff0c;在互联网中大型项目一定存在复杂的业务关系&#xff0c;尤其在商城类软件中如淘宝、PDD等商城&#xff0c;尤其在秒杀场景中&#xff0c;并发量可以到达千万级别&#xff0c;此时数据库就会…

第五十六章 树状数组(一)

第五十六章 树状数组一、前缀和的缺陷二、树状数组1、作用2、算法分析3、算法实现&#xff08;1&#xff09;lowbits()&#xff08;2&#xff09;插入&#xff08;3&#xff09;查询三、例题1、问题题目描述输入格式输出格式样例 #1样例输入 #1样例输出 #1提示2、代码一、前缀和…

【SCL】1200应用项目: 四节传送带机械手模拟控制

使用SCL编写小应用:四节传送带模拟和机械手模拟控制 文章目录 目录 文章目录 前言 一、四节传送带模拟控制 1.控制要求 2.参考图 3.接线图和I/0分配 4.编写程序 1.逆序启动 2.顺序停止 3.故障输入 4.调试 5.完整代码 二、机械手控制 1.控制要求 2. 接线图和I/0分配 3.编写程序 …

JVM内存模型深度剖析与优化

1. Java语言的跨平台特性 2. JVM整体结构及内存模型 堆存放着对象信息每个线程都会分配一块属于自己的内存空间&#xff08;栈空间&#xff09; 每个方法都会分配一块内存空间&#xff08;栈桢&#xff09;&#xff0c;上图 compute()方法 和 main()方法 都会分配到各自的栈桢空…

git 学习笔记

Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件,可以敏捷高效地处理任何或小或大的项目。Git 与常用的版本控制工具 CVS, Subversion 等不同&#xff0c;它采用了分布式版本库的方式&#xff0c;不需要服务器端软件支持。 一、安装配置…

线性神经网络(sotfmax回归)

sotfmax回归定义网络架构softmax运算softmax回归实现&#xff08;MNIST数据集&#xff09;数据集的处理读取数据集查看形状数据可视化读取小批量整合所有组件神经网络的搭建加载数据集初始化模型参数定义softmax函数定义模型定义损失函数&#xff08;难点&#xff09;分类精度训…

有序表之跳表

文章目录1、前言2、跳表简介3、理解“跳表”4、用跳表查询到底有多快5、跳表是不是很浪费内存6、高效的动态插入和删除7、跳表索引动态更新8、跳表代码实现1、前言 在开始讲解跳表之前&#xff0c;先来说一说积压结构。 何为积压结构&#xff1f;就是当数据达到了一定程度&am…

【ROS2实践】Vmware17下安装ubuntu22.04和ros2-humble

一、简介 ROS2-foxy已经不再维护&#xff0c;ROS2-humble成为主角&#xff0c;因而该转变一下开发场景了。如何安装&#xff1f;官方文档没有错&#xff0c;然而&#xff0c;照着做却无法进行。实超中遇到的需要变通的地方&#xff0c;官网是不给你提供解决的&#xff0c;本文给…

宽刈幅干涉高度计SWOT(Surface Water and Ocean Topography)卫星进展(待完善)

以下信息搬运自SWOT官方网站等部分文献资料&#xff0c;如有侵权请联系&#xff1a;sunmingzhismz163.com 排版、参考文献、部分章节待完善 概况 2022年12月16日地表水与海洋地形卫星SWOT (Surface Water and Ocean Topography)在加利福尼亚州范登堡航天基地由SpaceX猎鹰9号(Sp…

mysql面试题(最全)

1. 数据库三大范式是什么&#xff1f; 什么是范式&#xff1f; 范式是数据库设计时遵循的一种规范&#xff0c;不同的规范要求遵循不同的范式。 最常用的三大范式 第一范式(1NF)&#xff1a;属性不可分割&#xff0c;即每个属性都是不可分割的原子项。(实体的属性即表中的列)…