数据结构顺序表力扣例题AC——代码以及思路记录

顺序表力扣例题

27.移除元素

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

AC:

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++];}else{src++;}}return dst;
}

代码思想:
双指针,都指向起始位置,src负责检索数组中的元素并比较与val的关系,dst负责记录符合条件的个数(并保存符合条件的元素,小于当前位置的都符合)。当src指向的元素与val相同的时候src就跳过(不符合就不用管,且可以被覆盖),不相同则用src位置元素将dst所指位置的元素覆盖,两个指针都继续向前走一位,直到检索完整个数组。dst仅会保存符合要求的元素,此时所指位置就是符合要求的个数,返回dst就可以。

26. 删除有序数组中的重复项

给你一个 非严格递增排列 的数组 nums ,请你 原地 删除重复出现的元素,使每个元素 只出现一次 ,返回删除后数组的新长度。元素的 相对顺序 应该保持 一致 。然后返回 nums 中唯一元素的个数。

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

代码思想:
双指针,都指向起始位置,src负责检索数组中的元素并比较与dst所指位置元素的关系,dst负责记录符合条件的个数(并保存符合条件的元素,小于当前位置的都符合)。当src指向的元素与dst相同的时候src就跳过(不符合就不用管,且可以被覆盖,因为dst一定小于等于src),不相同则先将dst++(画图便可以看出此时dst所指的数字是符合的,因为第一个数肯定不需要被覆盖,且此时dst并没有移动,所以后边需要跳过此数再进行覆盖,所以需要先++,代码中写为++dst),再用src位置元素将dst所指位置的元素覆盖,src继续向前走一位,直到检索完整个数组。dst仅会保存符合要求的元素,此时所指位置就是符合要求的最后一位元素,由于下标是0开始,最后需要返回dst+1(在这里最后返回不可以用dst++,但可以用++dst,因为前者先return再++,但是return后程序就直接结束了,但是++dst会先执行++,所以也是可以的)。

88. 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组 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) {int i1 = m-1;int i2 = n-1;int j = m+n-1;while(i1 >= 0 && i2 >= 0){if(nums1[i1] > nums2[i2]){nums1[j--] = nums1[i1--];}else{nums1[j--] = nums2[i2--];}}//考虑当nums1都结束但是nums2仍有未比较完的的情况while(i2 >= 0){nums1[j--] = nums2[i2--];}
}

代码思路:
有几种思路可以写,①新建一个数组,依次遍历nums1和nums2,并进行比较,加入到新数组中;②将nums2直接合并到nums1中然后进行排序;第一种方法时间复杂度O(n),第二种O(n^2),所以优先考虑①,但是题目中要求最后提交的是nums1数组,所以不能新建数组,观察nums1,他的m个元素以后就都是0,则可以把m个元素以后的由0组成的那部分视为新数组,然后倒着进行比较,也就是先比较大的,然后哪个大哪个覆盖末尾的0,指针前移,因此需要三个指针,分别是i1,i2,进行比较,j用来记录当前nums1添加进去的元素个数和位置。此外还需要考虑在哪里程序终止,①当i2遍历完以后,i1剩余的本身就是非递减顺序,所以可以直接停止;②当i1遍历完但是i2还有未比较的数字时,仍然需要添加到nums1中,因为最终要的是nums1,所以还需要单独考虑一次这种情况(代码中有注释提示);函数返回类型是void,因此不需要return。

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

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

相关文章

arm 汇编调用C

arm64 汇编调用C函数 main.s .section .text .globl main main:stp x29, x30, [sp, -16]! //store fp x29 lr x30mov x0, #0mov x1, #1bl addmov x1, x0 // x0 return ldp x29, x30, [sp], 16 //restore fp lrretadd.c #include <stdio.h> int add(int a, int…

go使用docker sdk停止和删除docker

go使用docker sdk停止和删除docker 代码参考 代码 package mainimport ("context""fmt""github.com/docker/cli/cli/connhelper""github.com/docker/docker/api/types/container""github.com/docker/docker/client""n…

性能优化-HVX 指令介绍

「发表于知乎专栏《移动端算法优化》」 本文主要介绍了 HVX 指令相关的知识&#xff0c;包括 HVX 寄存器相关内容&#xff0c;指令的背景依赖&#xff0c;部分常用 intrinsic HVX 指令。具体指令的详细内容及使用还需阅读 HVX 的指令文档&#xff0c;以及细致的实践操作。 &…

【node】关于npm、yarn、npx的区别与使用

文章目录 npm (Node Package Manager):安装依赖运行脚本 npx:执行项目依赖中的命令 yarn:安装依赖eg.使用npx yarn install 的作用 npm (Node Package Manager): 用途&#xff1a; npm 是 Node.js 官方提供的包管理工具&#xff0c;用于安装、管理和分享 JavaScript 代码包。安…

C语言—fopen和ab+

在C语言中&#xff0c;fopen(“data”,“ab”) 是使用 fopen 函数以追加和读写模式打开一个名为 “data” 的文件的方法。 下面是对这个函数调用的各个部分的解释&#xff1a; fopen 函数 fopen 是一个标准库函数&#xff0c;用于打开文件。它的原型定义在 <stdio.h> 头…

库函数的模拟实现

目录 模拟实现strlen 模拟实现strcpy 模拟实现strcmp 模拟实现strcat 模拟实现strstr 模拟实现memcpy 模拟实现memmove 模拟实现strlen #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.h>int MyStrlen(char* str) {int len 0;while (str[len] ! \0)len;retu…

GitLab升级版本(任意用户密码重置漏洞CVE-2023-7028)

目录 前言漏洞分析影响范围查看自己的GitLab版本升级路程 升级过程13.1.1113.8.8 - 14.0.1214.3.614.9.5 - 16.1.6 前言 最近GitLab发了个紧急漏洞需要修复&#xff0c;ok接到命令立刻着手开始修复&#xff0c;在修复之前先大概了解一下这个漏洞是什么东西 漏洞分析 1、组件…

单点登陆(SSO)基于CAS实现前后端分离的SSO系统开发「IDP发起」

关于其他前端常见登录实现单点登录方案&#xff0c;请见「前端常见登录实现方案 单点登录方案 」 前沿 单点登录&#xff08;SSO&#xff09;&#xff0c;英文全称为 Single Sign On。 SSO 是指在多个应用系统中&#xff0c;用户只需要登录一次&#xff0c;就可以访问所有相互…

redis-持久化-1

Redis 提供了2个不同形式的持久化方式。 RDB&#xff08;Redis DataBase&#xff09; AOF&#xff08;Append Of File&#xff09; 一、Redis持久化之RDB 1.什么是RDB 在指定的时间间隔内将内存中的数据集快照写入磁盘&#xff0c; 也就是行话讲的Snapshot快照&#xff0c…

puppeteer实现截图

Window服务器说明 1.在本地安装 puppeteer 先创建一个本地文件夹puppeteer&#xff0c;我的地址D:\common_workspace\puppeteer 然后使用cmd打开这个文件夹所在位置&#xff0c;再执行如下两条命令即可。 npm install -g cnpm --registryhttps://registry.npm.taobao.orgcnpm …

剖析EasyExcel导入出现 The index of ‘xx‘ and ‘xx‘ must be inconsistent 解决方法

目录 1. 问题所示2. 原理分析3. 解决方法1. 问题所示 在导出Excel的时候,出现如下问题: com.alibaba.excel.exception.ExcelCommonException: The index of tyreNumber and remark must be inconsistentat com.alibaba.exce

为什么需要数据仓库

为什么不在OLTP环境下分析&#xff1f; OLTP环境也会存储历史数据&#xff0c;但这些历史数据并不是业务运行所需的&#xff0c;这些历史数据需要经常归档到数据仓库&#xff0c;并且在OLTP数据库中删除。 相比之下&#xff0c;事务环境适用于连续处理事务&#xff0c;通常应…

搭建通讯猫类似的TCP服务端

最近需要一个公网的TCP服务端平台来做4G模组的发包测验&#xff0c;通讯猫(http://www.tongxinmao.com/App/Detail/id/1)貌似使用不了&#xff0c;就干脆在自己的腾讯云上搭建了简单的TCP服务端。 我们搭建可以在服务器上使用Python、Java、C#等语言自行编写服务器程序。 目前是…

KADB使用PXF连接KES验证

验证环境 KADB版本&#xff1a;Greenplum Database 6.0.0 build dev.V003R002C001B0181.d354cc9215 KES版本&#xff1a;KingbaseES V008R006C007B0012 Java版本&#xff1a;openjdk version "1.8.0_262" PXF部署 以下操作假设KADB和KES已经部署完成并且启动正常…

nomachine下载安装使用教程(远程桌面)

文章目录 参考链接 nomachine 参考链接 [1]【远程桌面】nomachine下载安装使用教程、zerotier下载安装使用教程超详细&#xff1a;https://blog.csdn.net/weixin_44029896/article/details/128555481 [2] 树莓派开发之旅&#xff08;一&#xff09;——使用Nomachine进行远…

java动态导入excel按照表头生成数据库表

1、创建接口接收文件 //controller层 PostMapping("/importExcel1")public void importExcel1(HttpServletRequest request, MultipartFile file) {try {waterMeterService.importExcel1(request,file);} catch (Exception e) {throw new RuntimeException(e);}}//se…

selenium执行出现异常,SessionNotCreatedException ChromeDriver only supports

问题现状&#xff1a; 运行程序报错&#xff1a; selenium.common.exceptions.SessionNotCreatedException: Message: session not created: This version of ChromeDriver only supports Chrome version 114 Current browser version is 121.0.6167.85 with binary path /App…

重构改善既有代码的设计-学习(四):简化条件逻辑

1、分解条件表达式&#xff08;Decompose Conditional&#xff09; 可以将大块代码分解为多个独立的函数&#xff0c;根据每个小块代码的用途&#xff0c;为分解而得的新函数命名。对于条件逻辑&#xff0c;将每个分支条件分解成新函数还可以带来更多好处&#xff1a;可以突出条…

cartopy绘图特征

文章目录 添加特征add_feature区域截取 添加特征 cartopy中最基础的地图绘制函数是coastlines&#xff0c;即海岸线线条图&#xff0c;这很复合我们的绘图直觉&#xff0c;毕竟陆地和海洋的边缘&#xff0c;是最清晰的地理特征。而在此之上&#xff0c;还可以通过add_feature函…

Java 面试题库

基础篇 面向对象的特征 封装&#xff08;Encapsulation&#xff09;&#xff1a; 封装是指将对象的数据&#xff08;属性&#xff09;和行为&#xff08;方法&#xff09;结合在一起&#xff0c;形成一个独立的实体。对象的数据被隐藏在内部&#xff0c;只能通过定义好的接口&…