数据结构十一:数组相关经典面试题

       本篇博客详细介绍分析数组/顺序表常见的面试题,对于前面所学知识进行一个巩固,同时介绍一些力扣刷题中的一些概念:如:输出型参数等,在刷题中培养自己的编程思维,掌握常见的编程套路,形成题感!

第一题:移除元素

1.1 题目描述

 

1.2 解题分析

        本题另加要求:时间复杂度为O(n),  如果单纯利用顺序表删除元素的思想:只要遇到待删除指定元素,则从该元素位置开始,从前依次向后挪动数据进行元素覆盖,从而达到删除元素的效果,但是这样如果数组长度较大且该值出现次数非常多,那么,它的时间复杂度为:O(n^2)不符合要求,因此,这种思路时间复杂度不符合要求,换种思路:如果没有空间复杂度要求,我们可以这么做,先申请一块同样大小的数组,将原数组从前向后遍历,不等于待删除元素的,将其放到新数组,等于待删除元素的留在原地不要动,最后再将新数组元素遍历依次赋值给原数组,便可以达到要求,但是,这样空间复杂度不符合要求!!O(n)

        经过上面的分析,我们如果不申请数组,直接在原数组上直接进行覆盖,那是不是就可以达到要求?答案是肯定的!这便要引入:双指针思想。

1.3 实现过程

   借助双指针思想,时间复杂度O(n),空间复杂度:O(1) 思路如下:

  1. step1. 定义两个整型变量,用作数组的指针,同时赋值为0
  2. step2. 让一个指针src从前向后遍历原数组,如果当前位置是待删除元素,该指针src直接向后走,如果当前位置不是待删除元素,则将该位置元素赋值为另一个指针dst指向的位置,同时这两个指针同时向后走一步;
  3. step3. 直到原数组遍历结束,此时dst所指的位置就是当前数组的有效元素个数,也就是数组的长度,直接返回。

上述这种思想,就可以达到把原数组等于待删除元素的值全部覆盖,从而达到删除的效果!

 

1.4代码实现

int removeElement(int* nums, int numsSize, int val) 
{//1.定义两个指针int src =0,dst=0;//2.从头开始遍历数组while(src<numsSize){  //3.当前元素不是待删除元素,赋值给dst下标,src、dst继续往后走if(nums[src]!=val){nums[dst]=nums[src];dst++;src++;}//4. 当前元素是待删除元素,不要动,src直接往后遍历,等待不是待删除元素进行覆盖else{src++;}}return dst;
}

第二题:删除有序数组中的重复项

2.1 题目描述

 

2.2 解题分析

      本题与上题有异曲同工之处,同样是删除元素,但是这道题实质上是去重复元素,只保留其中的一个,并且也是要求在原数组基础上进行删除,因此也是借助双指针思想,找到不相同元素,然后进行元素覆盖。

2.3 实现过程

借助双指针思想,时间复杂度O(n),空间复杂度:O(1) 思路如下:

  1. step1. 定义三个整型变量prev、cur、dst,用作数组的指针,其中prev和cur用来比较相邻的两个元素是否相同,dst用来进行元素覆盖。
  2. step2. 如果相邻的两个元素相同,直接让指针prev和cur向后走,dst不要动,如果相邻的两个元素不相同,只会是两种情况:第一种它是一连串相同数字的最后一个,第二种它是一个单独出现的数字(如上面实例2所示),对于第一种情况,很好处理,直接将prev所处位置的元素赋值给dst下标的位置,然后三个指针同时向后走,对于第二种情况,需要最后单独赋值一次,因为:此时cur已经越界,循环无法进入,最后一个单独出现的数字并没有赋值给dst位置,需要单独处理!!!
  3. step3.直到原数组遍历结束,注意:遍历的结束条件为:cur<numsSize,不能用prev,因为cur此时已经越界,无法再继续往后比较了。此时dst所指的位置就是当前数组的有效元素个数,也就是数组的长度,直接返回。

    上述这种思想,就可以达到把原数组等于待删除元素的值全部覆盖,从而达到删除的效果!

 

 

 

2.4代码实现

int removeDuplicates(int* nums, int numsSize) {//判空,空数组无法删除if(numsSize==0)return 0;int prev=0,cur=1,dst=0;while(cur<numsSize){if(nums[prev]==nums[cur]){prev++;cur++;}else{nums[dst]=nums[prev];prev++;cur++;dst++;}}nums[dst]=nums[prev];prev++;dst++;return dst;
}

这道题注意边界条件的处理,以及特殊情况的处理,本质思想同第一题。 

第三题:合并两个有序数组

3.1 题目描述

3.2 解题分析

3.3 实现过程

3.4代码实现

第四题:旋转数组

4.1 题目描述

4.2 解题分析

4.3 实现过程

4.4代码实现

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php基础知识快速入门

一、PHP基本知识 1、php介绍&#xff1a; php是一种创建动态交互性的强有力的服务器脚本语言&#xff0c;PHP是开源免费的&#xff0c;并且使用广泛。PHP是解释性语言&#xff0c;按顺序从上往下执行&#xff0c;无需编译&#xff0c;直接运行。PHP脚本在服务器上运行。 2、ph…

瑞_23种设计模式_解释器模式

文章目录 1 解释器模式&#xff08;Interpreter Pattern&#xff09;1.1 介绍1.2 概述1.2.1 文法&#xff08;语法&#xff09;规则1.2.2 抽象语法树 1.3 解释器模式的结构1.4 解释器模式的优缺点1.5 解释器模式的使用场景 2 案例一2.1 需求2.2 代码实现 3 案例二3.1 需求3.2 代…

基于JSP的酒店客房管理系统(三)

目录 第四章 系统各模块的实现 4.1客房管理系统首页的实现 4.1.1 客房管理系统首页概述 4.2客房管理系统前台的实现 4.2.1 客房管理系统前台概述 4.2.2 客房管理系统前台实现过程 4.2.3 预定客房信息及客房信息的查询 4.3客房管理系统后台的实现 4.3.1 客房管理系统后…

基于springboot+vue+Mysql的在线动漫信息平台

开发语言&#xff1a;Java框架&#xff1a;springbootJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包&#xff1a;…

[蓝桥杯2024]-PWN:ezheap解析(堆glibc2.31,glibc2.31下的double free)

查看保护 查看ida 大致就是只能创建0x60大小的堆块&#xff0c;并且uaf只能利用一次 完整exp&#xff1a; from pwn import* #context(log_leveldebug) pprocess(./ezheap2.31)def alloc(content):p.sendlineafter(b4.exit,b1)p.send(content) def free(index):p.sendlineaft…

LeetCode 226.翻转二叉树(全网最多的解法)

LeetCode 226.翻转二叉树 1、题目 题目链接&#xff1a;226. 翻转二叉树 给你一棵二叉树的根节点 root &#xff0c;翻转这棵二叉树&#xff0c;并返回其根节点。 示例 1&#xff1a; 输入&#xff1a;root [4,2,7,1,3,6,9] 输出&#xff1a;[4,7,2,9,6,3,1]示例 2&#…

怎么通过Java语言实现远程控制无人售货柜

怎么通过Java语言实现远程控制无人售货柜呢&#xff1f; 本文描述了使用Java语言调用HTTP接口&#xff0c;实现控制无人售货柜&#xff0c;独立控制售货柜、格子柜的柜门。 可选用产品&#xff1a;可根据实际场景需求&#xff0c;选择对应的规格 序号设备名称厂商1智能WiFi控…

52. 【Android教程】网页视图:WebView

在前面的章节我们所围绕的全部都是纯客户端开发&#xff0c;我们叫 Native 开发。这样的好处就是体验和性能会非常好&#xff0c;但是在实际的使用中我们会发现存在大量的 H5 页面。这样就可以结合 Native / H5 双端的优势完成一个混合开发&#xff0c;而在这种开发模式中首当其…

[HNOI2003]激光炸弹

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 二维前缀和板题。 注意从&#xff08;1,1&#xff09;开始存即可&#xff0c;所以每次输入x,y之后&#xff0c;要x,y。 因为m的范围最大为…

微搭低代码入门05文件的上传和下载

目录 1 创建数据源2 创建应用3 创建页面4 设置导航功能5 文件上传6 文件下载总结 小程序中&#xff0c;我们通常会有文件的上传和下载的需&#xff0c;在微搭中&#xff0c;文件是存放在云存储中&#xff0c;每一个文件都会有一个唯一的fileid&#xff0c;我们本篇就介绍如何通…

农药生产厂污废水如何处理达标

农药生产厂的污废水处理是确保该行业对环境的负面影响最小化的重要环节。下面是一些常见的处理方法和步骤&#xff0c;可以帮助农药生产厂的污废水达到排放标准&#xff1a; 预处理&#xff1a;将废水进行初步处理&#xff0c;去除大颗粒悬浮物和固体残渣。这可以通过筛网、沉淀…

ArthasGC日志GCeasy详解

Arthas详解 Arthas是阿里巴巴在2018年9月开源的Java诊断工具,支持JDK6,采用命令行交互模式,可以方便定位和诊断线上程序运行问题.Arthas官方文档十分详细.详见:官方文档 Arthas使用场景 Arthas使用 # github下载arthas wget https://alibaba.github.io/arthas/arthas-boot.j…

C++例题:大数运算---字符串相加(使用数字字符串来模拟竖式计算)

1.代码速览 class Solution2 { public:string addStrings(string num1, string num2){//end1和end1是下标int end1 num1.size() - 1;int end2 num2.size() - 1;string str;//下标(指针)从后向前走,走到头才可以结束,所以是end>0int next 0;while (end1 > 0 || end2 &…

ADS基础教程9-理想模型和厂商模型实现及对比

目录 一、概要二、厂商库使用1.新建cell2.调用厂商库中元器件3.元器件替换及参数选择4.完成参数选择5.导入子图 三、仿真实现注意事项 一、概要 本文将介绍在ADS中调用厂商提供的库&#xff0c;来进行原理图仿真&#xff0c;并实现与ADS系统提供的理想元器件之间的比较。 二、…

触摸OpenNJet,感悟云原生

小程一言 云原生使得应用充分利用云计算、容器化和微服务架构等现代技术来构建和运行应用程序。 云原生技术的用处在于提高应用程序的可靠性、可伸缩性和灵活性&#xff0c;加快开发和部署速度&#xff0c;降低成本&#xff0c;提升整体的效率和竞争力。通过采用云原生技术&a…

SpringBoot+Vue+Element-UI实现协同过滤算法商品推荐系统

前言介绍 本次设计任务是要设计一个基于协同过滤算法的商品推荐系统&#xff0c;通过这个系统能够满足商品推荐系统的管理功能。系统的主要包括首页&#xff0c;个人中心&#xff0c;用户管理&#xff0c;商品类型管理&#xff0c;商品信息管理&#xff0c;系统管理&#xff0…

LabVIEW航空发动机主轴承试验器数据采集与监测

LabVIEW航空发动机主轴承试验器数据采集与监测 随着航空技术的迅速发展&#xff0c;对航空发动机性能的测试与监测提出了更高的要求。传统的数据采集与监测方法已难以满足当前高精度和高可靠性的需求&#xff0c;特别是在主轴承试验方面。基于LabVIEW的航空发动机主轴承试验器…

小工具 - 用Astyle的DLL封装一个对目录进行代码格式化的工具

文章目录 小工具 - 用Astyle的DLL封装一个对目录进行代码格式化的工具概述笔记效果编译AStyle的DLL初次使用接口的小疑惑测试程序 - 头文件测试程序 - 实现文件测试程序 - RC备注END 小工具 - 用Astyle的DLL封装一个对目录进行代码格式化的工具 概述 上一个实验(vs2019 - ast…

移动机器人系统与技术:自动驾驶、移动机器人、旋翼无人机

这本书全面介绍了机器人车辆的技术。它介绍了道路上自动驾驶汽车所需的概念。此外&#xff0c;读者可以在六足机器人的构造、编程和控制方面获得宝贵的知识。 这本书还介绍了几种不同类型旋翼无人机的控制器和空气动力学。它包括各种旋翼推进飞行器在不同空气动力学环境下的模…

ComfyUI 基础教程(十三):ComfyUI-Impact-Pack 面部修复

SD的WebUI 中的面部修复神器 ADetailer,无法在ComfyUI 中使用。那么如何在ComfyUI中进行面部处理呢?ComfyUI 中也有几个面部修复功能,比如ComfyUI Impact Pack(FaceDetailer),以及换脸插件Reactor和IPAdapter。 ComfyUI-Impact-Pack 是一个功能强大的插件,专为 ComfyUI …