数据结构之顺序表相关算法题

目录

  • 一、移除元素
  • 二、删除有序数组中的重复项
  • 三、合并两个有序数组
  • 总结


一、移除元素

移除元素 - 力扣
在这里插入图片描述
在这里插入图片描述
思路一:就是创建一个临时数组,对原数组进行遍历,找出与val不同的数据放到新数组里,然后再将tmp中的数据导回原数组
在这里插入图片描述
这个思路的复杂度很好猜,空间复杂度为O(N),时间复杂度为O(N)
但是
在这里插入图片描述

int tmp[numsSize];

这里是变长数组,某些编译器上是不支持变成数组的,比如说msvc,这里使用动态内存开辟空间更好
在这里插入图片描述

而且该题目说要原地移除,这种方法是使用了一个临时数组,也是不太符合题目的


思路二:双指针法,创建两个变量 dst,src
src在前面探路(找非val值)
dst在后面站岗(保存非val值)

  1. 如果src指向的数据是val,src++
  2. 如果src指向的数据不是val,赋值(src指向的值给dst),src和dst都++

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
结果只保证前dst个数据为2,剩下的不管
在这里插入图片描述


二、删除有序数组中的重复项

删除有序数组中的重复项 - 力扣
在这里插入图片描述
在这里插入图片描述
思路1:创建新数组,遍历原数组,将不重复数据导入新数组中,再将新数组中的数据导入到原数组中
在这里插入图片描述
因为涉及不重复数据的导入,所以要定义两个变量来遍历,初始化i=j,第一个数据直接拿,接下来j++,此时i==j,i和j整体++,接下来i和j不相等,不相等把j向新数组中放,之后i与j再++
在这里插入图片描述
此时j越界,将新数组数据导入原数组中
在这里插入图片描述
前两个数据是唯一的数据,满足题目要求
该思路的唯一一个小问题也是没有在原数组的基础上进行操作,且很好猜时间和空间复杂度为O(n)

于是就有了思路2:
依旧是使用双指针法:创建两个变量,分别指向数组起始和下一个位置

  1. 如果src的值和dst的值相等,src++
  2. 如果src的值和dst的值不相等,dst++,赋值,src++

在这里插入图片描述
最后src越界,当前数组里的值2,3,3,3,前两个数据是2,3,满足题意
在这里插入图片描述
dst指向下标为1的数据,此时返回dst+1
在这里插入图片描述
示例二按该思路推导结果如下,也是满足的,前5个数据是唯一的数据

代码如图

在这里插入图片描述
优化1
在这里插入图片描述
如图刚开始src!=dst,dst++再src给dst赋值,此时的赋值就非常多余
所以有了如下代码:
在这里插入图片描述
由于两个if嵌套是且的关系,所以还可以优化
在这里插入图片描述


三、合并两个有序数组

合并两个有序数组 - 力扣
在这里插入图片描述
在这里插入图片描述
思路1:
先合并数组,再对nums1进行排序,可以使用冒泡排序,不过时间复杂度较高,为O(N2

思路2:类似于尾插操作,从后往前遍历数组,找大(谁大谁先往后放)
这里定义l1,l3为nums1的下标,l1放到有效数据的最后一个位置。l3指向m+n-1这个位置,是用来存放数据的位置,l2为nums2的下标,指向n-1的位置
在这里插入图片描述
首先l1与l2比较,因为6大,所以6存放到l3的位置,之后l2,l3减减
在这里插入图片描述
此时l1与l2比较,l2大,5放到l3位置,放完之后l2,l3再减减
在这里插入图片描述
同样推理操作后,l1大,l1,l3减减
在这里插入图片描述
此时l1,l2均为2,假设l2的数字大,将2放到l3的位置
在这里插入图片描述
此时l2,l3再减减,此时l2越界,nums1已有序,且nums2先越界,也有相反的情况
在这里插入图片描述
同样的思路,l1与l2相比,6放l3的位置,此时l1与l3减减
在这里插入图片描述
l1与l2再比较,5大放l3,l1与l3减减
在这里插入图片描述
同样思路,如图步骤之后l2,l3减减
在这里插入图片描述
此时假设l1大,放到l3的位置
在这里插入图片描述
之后l1,l3减减,此时l1已经越界,跳出循环,此时nums2中还有两个数据没有放到第一个数组中,此时只需将剩下两个数据循环放到nums1中即可
在这里插入图片描述
此时也是有序的

代码如下:
在这里插入图片描述


总结

以上就是数据结构顺序表相关算法题的内容了,这些算法题的代码普遍很简答,主要就是在思考上。喜欢的靓仔靓女们不要忘记一键三连给予支持哦~

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

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

相关文章

百胜软件×华为云联合赋能,“超级国民品牌”海澜之家新零售加速前行

报道显示,早在2012年海澜之家就开始布局数字化征程,并于近年对公司全流程信息化进行综合重构升级优化,在采销协同、业财一体等方面突破原有架构,通过信息化架构的增强为业务发展提供支撑。作为新零售重要组成部分的海澜电商信息化…

“Zen 5”: The AMD High-Performance 4nm x86-64 Microprocessor Core

Codenamed “Zen 5,” AMD’s next-generation, energy-efficient high-performance x86 core targets a wide array of client, server, and embedded markets. Fabricated in TSMC’s 4nm FinFET process, the 55mm2 core complex (CCX), shown in Fig. 2.1.1., contains 8.6…

Linux数据库:【表的约束】【表的基本查询】

目录 一.表的约束 1.1空属性 not null 1.2默认值 default ​空属性和默认值一起使用? 1.3列描述 comment 1.4 zerofill 1.5 主键 1.6 自增长 1.7 唯一键 1.8 外键 二. 表的基本查询 2.1 Create 2.1.1单行数据 全列插入 2.1.2多行数据 指定列插入 2…

AJAX RSS Reader

AJAX RSS Reader 引言 随着互联网的快速发展,信息量的爆炸式增长,用户对信息获取的便捷性和实时性提出了更高的要求。RSS(Really Simple Syndication)作为一种信息聚合技术,已经广泛应用于新闻、博客、论坛等网络平台。AJAX(Asynchronous JavaScript and XML)技术则提…

从实验室到落地:飞算JavaAI水位监测系统的工程化实践

一、飞算JavaAI平台简介飞算JavaAI是国内领先的软件开发智能平台,通过AI技术赋能软件开发全流程,帮助开发者实现"一人一项目,十人抵百人"的高效开发模式。平台核心优势包括: 智能代码生成:基于自然语言描述自…

前端Vite介绍(现代化前端构建工具,由尤雨溪开发,旨在显著提升开发体验和构建效率)ES模块(ESM)、与传统Webpack对比、Rollup打包

文章目录**1. 核心特性**- **极速启动**:- **按需编译与热模块替换(HMR)**:- **开箱即用**:- **生产环境优化**:- **插件系统**:**2. 工作原理****开发模式**- **基于 ESM 的按需加载**&#xf…

python sqlite3模块

十分想念顺店杂可。。。Python 的sqlite3模块是标准库中用于操作SQLite 数据库的工具。SQLite 是一款轻量级嵌入式数据库(无需独立服务器,数据存储在单一文件中),适合小型应用、本地数据存储或原型开发。sqlite3模块提供了完整的 …

用 Python 绘制企业年度财务可视化报告 —— 从 Excel 到 9 种图表全覆盖

用 Python 绘制企业年度财务可视化报告 —— 从 Excel 到 9 种图表全覆盖在企业经营分析中,光看一堆财务数字很难直观发现规律和问题。 如果能将这些数据转化为可视化图表,不仅更美观,还能帮助管理层快速做出决策。今天,我就用 Py…

一次 Unity ↔ Android 基于 RSA‑OAEP 的互通踩坑记

这篇分享,记录我如何从“Base64 报错/平台不支持/解密失败”一路定位到“填充算法不一致”的根因,并给出两条稳定落地方案。同时整理了调试手册、代码片段和上线前自检清单,方便你复用。 背景 Unity 端用公钥加密一段紧凑 JSON(i…

Go语言GC机制:高效并发回收解析

Go 语言的垃圾回收(Garbage Collection,简称 GC)是其自动内存管理的核心机制,旨在自动识别并回收不再被使用的内存,避免内存泄漏,减轻开发者的手动内存管理负担。Go 的 GC 算法经历了多次迭代优化&#xff…

imx6ull-驱动开发篇23——Linux 内核定时器实验

目录 实验程序编写 修改设备树文件 定时器驱动程序 timer.c 测试 timerApp.c Makefile 文件 运行测试 实验程序编写 本讲实验,我们使用正点原子I.MX6U-ALPHA 开发板,通过linux内核定时器周期性的点亮和熄灭开发板上的 LED 灯, LED 灯…

IPTV系统:开启视听与管理的全新篇章

在当今数字化飞速发展的时代,IPTV系统正以前所未有的姿态,重塑着我们的视听体验与管理模式。它不仅仅是一套技术系统,更是连接信息、沟通情感、提升效率的桥梁,为各个领域带来了全新的变革与发展机遇。从电视直播的角度来看&#…

PyTorch笔记9----------Cifar10图像分类

1.图像分类网络模型框架解读 分类网络的基本结构 数据加载模块:对训练数据加载数据重组:组合成网络需要的形式,例如预处理、增强、各种网络处理、loss函数计算优化器 数据加载模块 使用公开数据集:torchvision.datasets使用自定义…

飞凌OK3568开发板QT应用程序编译流程

飞凌OK3568开发板QT应用程序编译流程开发环境:ubuntu20.04(主机)、飞凌OK3568开发板一般在linux系统下开发用于ARM开发板的QT应用程序时,直接在主机上开发然后进行交叉编译即可,但有时候ARM开发板的厂家提供的SDK中可能…

飞算JavaAI合并项目实战:7天完成3年遗留系统重构

引言 企业数字化进程中,遗留系统改造始终是CIO面临的头号难题。某电商平台的实践数据显示:3年以上的Java项目平均存在47%的冗余代码,63%的架构设计不符合当前业务需求,进行系统性重构需要投入相当于原开发量200%的资源。传统&quo…

卫星速度增量和比冲及推力之间的关系

一、定义1.1.比冲(Isp):比冲是衡量发动机性能的重要指标,反映了单位重量推进剂在发动机中产生的冲量,单位为米/秒(m/s),代表燃料燃烧时喷流速度。这个单位与速度单位“米/秒”相同&a…

MATLAB绘制各种心形曲线

1.方程(1)心形线的经典隐函数方程为:(2)参数方程(更平滑的心形):(3)极坐标心形线(4)参数方程(3D心形)(5)隐函数3D心形2. MATLAB代码clc;close all;clear all;warning off;%清除变量 rand(seed, 100); randn…

Django REST Framework视图

Django REST Framework (DRF) 视图类详解DRF 提供了丰富的视图类来构建 API,从基础到高级,满足不同复杂度的需求。以下是 DRF 的主要视图类及其使用场景:1. 基础视图类APIView所有 DRF 视图的基类,相当于 Django 的 View 类的增强…

Linux面试题及详细答案 120道(1-15)-- 基础概念

《前后端面试题》专栏集合了前后端各个知识模块的面试题,包括html,javascript,css,vue,react,java,Openlayers,leaflet,cesium,mapboxGL,threejs&…

week1-[分支结构]中位数

week1-[分支结构]中位数 题目描述 给定 444 个正整数 a,b,c,da,b,c,da,b,c,d,输出它们的中位数,答案四舍五入保留 111 位小数。 输入格式 输入共 111 行 444 个正整数 a,b,c,da,b,c,da,b,c,d。 输出格式 输出共 111 行 111 个浮点数表示答案。 样例 #1 样…