27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组(双指针遍历)
目录
- [27. 移除元素-力扣](https://leetcode.cn/problems/remove-element/description/?languageTags=c)
- [26. 删除有序数组中的重复项](https://leetcode.cn/problems/remove-duplicates-from-sorted-array/)
- [88. 合并两个有序数组](https://leetcode.cn/problems/merge-sorted-array/)
下面的几道题,都运用一个双指针(下标)遍历法
27. 移除元素-力扣

示例1:
输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2]
示例2:
输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3]
这道题最容易想到的思想是开辟一个新数组,然后遍历原数组,如果原数组中的某个值不等于val的值,就把这个值放到新数组中
如图:
最开始src指向的元素等于val,src向后走,des不变
src指向的值不等于val,所以将这个值放到des指向的空间中,接着src和des都向后移
接下来的步骤以此类推,最终会得到一个合适的数组
但是这个方法显然不满足题中要求的原地修改,但是我们可以借助这个思想,只不过是在原数组上进行操作
让src和des都指向原数组,其余步骤都与上面那个方法类似

最开始src指向的元素等于val,src向后走,des不变

接着src指向的元素的值不等于val,把这个值赋给des指向的空间中,接着src des向后挪

src指向的元素的值不等于val,把这个值赋给des指向的空间中,接着src des向后挪

src指向的元素等于val,src向后走,des不变

此时,src已经遍历出了数组,遍历结束,可以看到实际上操作后的数组就是[2,2],长度是2,也正好是作为下标的des的值,所以最后返回des的值。
代码如下:
int removeElement(int* nums, int numsSize, int val) {int des = 0;for (int src = 0; src < numsSize; src++) {if (nums[src] != val) {nums[des] = nums[src];des++;}}return des;
}
26. 删除有序数组中的重复项

这道题的思想与上一题思维类似,也是运用双指针遍历法
这道题的做法是:
定义2个指针,一个作为des指向第一个元素,一个作为src指向第二个元素
如果des与src指向的元素相同,就src++
如果des与src指向的元素不同,因为此前des已经保存了之前的值,所以先des++,再把src的值放到des中,再src++
代码如下:
int removeDuplicates(int* nums, int numsSize){int src = 1;int des = 0;while(src<numsSize){if(nums[src]==nums[des]){src++;}else{nums[++des] = nums[src++];}}return des+1;}
88. 合并两个有序数组

合并2个有序数组,这里可以使用归并排序的思想,但是这题与归并思想有些区别
这道题是把值最后都归到数组nums1中,如果还是按照归并做法从前往后操作则会覆盖的值
所以这道题我们从后往前归并

在begin1和begin2中选出较大的值,放到des中,然后des--,以及对应元素较大的那个begin减1
接着还有个问题:
- 如果
begin2先循环完,因为数组都是有序的,所以这是已经合并结束 - 如果
begin1先循环完,nums2中的部分数据可能还没有合并到nums1中,所以这里可以把nums2中的元素拷贝到nums1中,拷贝的个数其实是des+1
代码如下:
void merge(int* nums1, int nums1Size, int m, int* nums2, int nums2Size, int n){int des = nums1Size-1;int begin1 = m-1;int begin2 = n-1;while(begin1>=0&&begin2>=0){if(nums1[begin1]>nums2[begin2]){nums1[des] = nums1[begin1];begin1--;des--;}else if(nums1[begin1]<=nums2[begin2]){nums1[des] = nums2[begin2];begin2--;des--;}}if(begin2<0){return;}else if(begin1<0){memmove(nums1,nums2,sizeof(int)*(des+1));}}
下面还有一个牛客网的题,也是运用双指针(下标)遍历法
牛客网:BC98 序列中删除指定数字

代码如下:
#include <stdio.h>
int main()
{//输入各个值int N= 0;scanf("%d",&N);int arr[N];for(int i=0;i<N;i++){scanf("%d",&arr[i]);}int val = 0;scanf("%d",&val);//删除指定数字int des = 0;for(int src=0;src<N;src++){if(arr[src]!=val){arr[des] = arr[src];des++;}}//输出修改后的序列for(int i = 0;i<des;i++){printf("%d ",arr[i]);}
}
相关文章:
27. 移除元素 26. 删除有序数组中的重复项 88. 合并两个有序数组(双指针遍历)
目录[27. 移除元素-力扣](https://leetcode.cn/problems/remove-element/description/?languageTagsc)[26. 删除有序数组中的重复项](https://leetcode.cn/problems/remove-duplicates-from-sorted-array/)[88. 合并两个有序数组](https://leetcode.cn/problems/merge-sorted-…...
什么时候用std::move()?
文章目录1. "是什么?"2. "有何用?"3. "什么时候用?"1. “是什么?” 虽然 std::move() 从技术角度上是一个函数 ,但我认为它不是真正的函数。 它是编译器考虑表达式值的方式之间的转换器。 2. “有何用?” 首先要注意的是 std…...
建立做机器学习项目的范式
建立起做机器学习项目的范式,萃取出核心步骤,避免后面做项目没有明确的方向。 核心步骤: 1、明确自己想做什么样的项目,感兴趣的领域; 2、找到满足项目的数据集,开源的或者自建数据集; 数据…...
搭建k8s高可用集群—20230225
文章目录多master(高可用)介绍高可用集群使用技术介绍搭建高可用k8s集群步骤1. 准备环境-系统初始化2. 在所有master节点上部署keepalived3.1 安装相关包3.2 配置master节点3.3 部署haproxy错误解决3. 所有节点安装Docker/kubeadm/kubelet4. 部署Kuberne…...
Java 修饰符和多态
文章目录一、修饰符1. 权限修饰符2. 状态修饰符2.1 final2.2 static二、多态1. 成员访问特点2. 多态中的转型3. 多态案例一、修饰符 1. 权限修饰符 2. 状态修饰符 2.1 final final 关键字是最终的意思,可以修饰成员方法、成员变量及类。 //1.修饰成员变量 publi…...
学了一年Java的我,想转嵌入式了
秋名山码民的主页 🎉欢迎关注🔎点赞👍收藏⭐️留言📝 🙏作者水平有限,如发现错误,还请私信或者评论区留言! 目录前言为啥我想去转行?如果我现在选择转硬件,我…...
【Git】Git冲突与解决方法
目录 一、Git冲突如何产生? 二、解决Git冲突—手动修改冲突 【第一步】在 hot-fix 分支上增加如下代码,并且提交。 【第二步】在master 分支上同样的地方增加如下代码,并且提交。 【第三步】 我们现在在 master 分支上合并 hot-fix 分支&a…...
深度剖析数据在内存的存储
目录1.深度剖析数据在内存的存储(前言)数据类型介绍类型的基本归类整形在内存中的存储原码、反码、补码大小端练习总结1.深度剖析数据在内存的存储(前言) 今天就让我戴佳伟给大家讲一下数据在内存中的存储。之中有好多让我们深思的点,大家都拿起笔记本,…...
身高排序(绝对值大的排后面,小的排前面)
题目描述 小明今年升学到了小学一年级,来到新班级后,发现其他小朋友身高参差不齐,然后就想基于各小朋友和自己的身高差,对他们进行排序,请帮他实现排序 输入描述 第一行为正整数H和N 0 < H < 200 为小明的身高…...
高频前端面试题之HTML篇(三)
11. label的作用是什么?是怎么用的? label元素不会向用户呈现任何特殊效果,但是,它为鼠标用户改进了可用性,当我们在label元素内点击文本时就会触发此控件。也就是说,当用户选择该标签时,浏览器…...
使用DG备份恢复测试库的流程以及可能出现的问题
使用DG备份恢复测试库的流程以及可能出现的问题 评估数据量和服务器存储空间从DG备库备份全库和归档日志清理测试库环境测试库恢复备份(一)从DG主库备份控制文件测试库恢复备份(二)从DG备库备份最新的归档日志测试库恢复备份(三)需要单独备份数据文件的情况思路:从DG备库…...
Springboot注释解析
SpringBootApplication 标注主程序类 说明一个spring boot应用 SpringBootConfiguration 标注为spring boot配置类 EnableAutoConfiguration 开启自动配置功能 AutoConfigurationPackage 自动配置包 Import({Registrar.class}) 导入一个容器到组件 Registrar.class…...
C语言之通讯录(动态 存储文件版)
目录 前言 一.基本思路 二.代码的实现 2.1通讯录菜单 2.2通讯录的定义及功能 2.3函数实现 2.3.1初始化通讯录 2.3.2文件信息传递到通讯录里 2.3.3扩容通讯录 2.3.4增加联系人 2.3.5删除联系人 2.3.6查询联系人 2.3.7修改联系人 2.3.8打印通讯录 2.3.9信息保留在文…...
Linux 工具
文章目录一、软件包管理:yum1. 软件的生态环境2. yum 的使用3. yum 源及分类4. 在 centos 7.6 下更新 yum 源到国内镜像5. yum 命令二、编辑器:vim1. 命令模式2. 底行模式3. 插入模式4. 替换模式和视图模式5. vim 配置三、编译器:gcc/g1. C语…...
Java知识复习(七)常见的设计模式(装饰、代理、观察、策略、建造)
前言 参考书籍:《秒懂设计模式》 1、装饰器模式(Decorator) 1、装饰器模式:对原始对象动态地进行“包装”,是对类实例“装饰”的结果;类似于继承的效果,但这个过程是动态的,是可设…...
Linux系统看门狗应用编程
目录看门狗应用编程介绍打开设备获取设备支持哪些功能:WDIOC_GETSUPPORT获取/设置超时时间:WDIOC_GETTIMEOUT、WDIOC_SETTIMEOUT开启/关闭看门狗:WDIOC_SETOPTIONS喂狗:WDIOC_KEEPALIVE看门狗应用编程实战在产品化的嵌入式系统中&…...
Spring MVC 源码- LocaleResolver 组件
LocaleResolver 组件LocaleResolver 组件,本地化(国际化)解析器,提供国际化支持回顾先来回顾一下在 DispatcherServlet 中处理请求的过程中哪里使用到 LocaleResolver 组件,可以回到《一个请求的旅行过程》中的 Dispat…...
Servlet
Servlet1 简介2 快速入门3 执行流程4 生命周期5 方法介绍6 体系结构7 urlPattern配置8 XML配置1 简介 Servlet是JavaWeb最为核心的内容,它是Java提供的一门动态web资源开发技术。 使用Servlet就可以实现,根据不同的登录用户在页面上动态显示不同内容。 …...
简单的周总结
做一个简单的周总结。 校 OJ 上打了近 7 场比赛,ZR 及其他平台各一两场左右。 头几场打的中规中矩,分数大致在 100-200 左右,与同学分数差别不太大,但也没有很突出。 后面几场比较爆炸,分数一直在 100 以下࿰…...
Elasticsearch7.8.0版本进阶——IK中文分词器
目录一、ES 的默认分词器测试示例二、IK 中文分词器2.1、IK 中文分词器下载地址2.2、ES 引入IK 中文分词器2.3、IK 中文分词器测试示例三、ES 扩展词汇测试示例一、ES 的默认分词器测试示例 通过 Postman 发送 GET 请求查询分词效果,在消息体里,指定要分…...
DeepSeek LeetCode 2509.查询树中环的长度 public int[] cycleLengthQueries(int n, int[][] queries)
这道题的核心是找到两个节点在完全二叉树中的路径长度,然后计算环的长度。关键思路:1. 完全二叉树的节点编号规律:节点 i 的父节点是 i/2 2. 两个节点之间的路径长度 深度差 2 LCA深度差 3. 环的长度 路径长度 1(加回重复的L…...
2026年AI辅助研发趋势:智能知识问答如何重塑企业知识库的未来?
在2026年的当下,大模型技术已经从最初的"聊天玩具"逐渐渗透到企业级研发的毛细血管中。作为深耕DevOps领域的架构师,我观察到一个显著的变化:企业知识库(Knowledge Base)正在从单纯的"文档存储中心&quo…...
千川素材外包月烧3万,转易元AI自产省70%成本,跑量还更猛——真实账单对比
很多商家做千川投放时,最开始以为最贵的是投流预算,后来才发现,真正长期烧钱的其实是素材。计划每天要新视频,爆款跑起来要裂变,素材疲劳了要补货,全域推广还要不同场景、不同卖点、不同人群的素材矩阵。外…...
一文搞懂 MySQL:一条 SQL 语句的完整执行之旅
你是否每天都在写 SQL,却从未想过它在 MySQL 内部是如何一步步执行的?今天我们就通过这张经典的 MySQL 执行流程图,带你拆解一条 SQL 从客户端发送到结果返回的完整过程,搞懂这个过程,你就能轻松理解 SQL 优化、事务原…...
phpenv终极指南:5分钟掌握PHP多版本管理的完整解决方案
phpenv终极指南:5分钟掌握PHP多版本管理的完整解决方案 【免费下载链接】phpenv Simple PHP version management 项目地址: https://gitcode.com/gh_mirrors/ph/phpenv 还在为不同PHP项目间的版本冲突而烦恼吗?phpenv为您提供了一站式PHP版本管理…...
保姆级教程:在ROS2 Humble上,用Orbbec Astra Pro深度相机搞定单目标定(附常见镜像问题解决)
保姆级教程:ROS2 Humble与Orbbec Astra Pro深度相机单目标定实战指南 深度相机在机器人视觉、三维重建等领域扮演着关键角色,而精确的相机标定则是确保数据可靠性的第一步。本文将手把手带你完成Orbbec Astra Pro在ROS2 Humble环境下的单目标定全流程&am…...
美股api的WebSocket偶尔断连,心跳间隔设多少秒最合适?
做美股相关的数据服务时,我碰到一个小烦恼:WebSocket连接偶尔断开。尤其是实时tick数据,程序明明还在跑,提示“断开”,有时候还挺突然的。我自己测试了不少方法,发现心跳设置是最容易影响稳定性的一个点。 …...
多版面文章活动公众号管理系统
文章营销活动系统概述基于微擎系统开发的在线交付文章营销推广类源码应用,支持多活动管理、多站点搭建及多版面切换。核心功能包括转发奖励积分或余额,适配文章推广、流量裂变及营销获客需求。核心功能多活动管理 后台可创建并管理多个营销活动ÿ…...
数据挖掘与多层神经网络:极简学习路径,神经网络核心机制精要
核心理念:神经网络 可学习的多层次特征提取器 模式匹配器。它通过数据自动学习从输入到输出的复杂映射规则。一、 基础奠基(必须知道的概念)数学基础:线性代数(计算骨架):数据是向量/矩阵&…...
RT-Thread v5.2.2内核与驱动深度优化:调度、CAN、串口与生态工具全面解析
1. 项目概述:RT-Thread v5.2.2 版本深度解析作为一名在嵌入式领域摸爬滚打多年的开发者,每次看到像RT-Thread这样的主流实时操作系统发布新版本,我都会习惯性地去“扒一扒”更新日志。这不仅仅是看热闹,更是为了评估它能否解决我手…...



