代码随想录:移除元素相关题目推荐(26、283、844)

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

题目

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

考虑 nums 的唯一元素的数量为 k ,你需要做以下事情确保你的题解可以被通过:

  • 更改数组 nums ,使 nums 的前 k 个元素包含唯一元素,并按照它们最初在 nums 中出现的顺序排列。nums 的其余元素与 nums 的大小不重要。
  • 返回 k 。

示例 1:

输入:nums = [1,1,2]
输出:2, nums = [1,2,_]
解释:函数应该返回新的长度 2 ,并且原数组 nums 的前两个元素被修改为 1, 2 。不需要考虑数组中超出新长度后面的元素。

示例 2:

输入:nums = [0,0,1,1,1,2,2,3,3,4]
输出:5, nums = [0,1,2,3,4]
解释:函数应该返回新的长度 5 , 并且原数组 nums 的前五个元素被修改为 0, 1, 2, 3, 4 。不需要考虑数组中超出新长度后面的元素。

代码

class Solution {public int removeDuplicates(int[] nums) {int slow = 0; //slow指向上一个插入的元素位置int fast = 0; //fast指向待比较的元素位置while(fast < nums.length){//当前待比较元素等于前一个插入元素,重复了if(nums[fast] == nums[slow]){fast++;  //fast后移继续比较}//当前待比较元素不等于前一个插入元素else{nums[slow+1] = nums[fast];  //在slow后边插入新元素slow++;  //slow加1继续指向新插入的元素为止fast++;  //fast后移继续比较}}return slow+1;  //slow指向的是上一个插入元素的位置,+1等于长度}
}

总结

        核心是快慢指针,快指针进行遍历,指向带判断的元素,slow指向前一个被插入的元素,用于和fast进行比较。如果相同,fast往后走,如果不同,把fast插入slow+1位置,slow后移,fast后移。

283.移动零

题目

给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。

请注意 ,必须在不复制数组的情况下原地对数组进行操作。

示例 1:

输入: nums = [0,1,0,3,12]
输出: [1,3,12,0,0]

示例 2:

输入: nums = [0]
输出: [0]

代码

class Solution {public void moveZeroes(int[] nums) {int slow = 0; //slow指向待插入元素的索引int fast = 0; //fast指向被判断的元素位置//fast遍历数组进行一个个判断是否为0while(fast < nums.length){//等于0,fast向后继续找if(nums[fast] == 0){fast++;}//不等于0,要插入元素else{nums[slow] = nums[fast]; //把fast元素插入slowslow++; //slow指向新的待插入元素位置fast++; //fast指向下一个带判断的元素位置}}//slow指向待插入元素位置,把[slow,nums.length)的补0while(slow < nums.length){nums[slow] = 0;slow++;}}
}

总结

        核心还是fast和slow指针。fast指向带判断的元素,对nums进行遍历,slow指向待插入元素的位置。如果fast是0,fast++后移继续判断。如果fast不是0,就把fast插入slow,然后slow后移指向新的待插入元素位置,fast后移继续判断。最后,[slow,nums.length)的位置补0即可。

844.比较含退格的字符串

题目

给定 s 和 t 两个字符串,当它们分别被输入到空白的文本编辑器后,如果两者相等,返回 true 。# 代表退格字符。

注意:如果对空文本输入退格字符,文本继续为空。

示例 1:

输入:s = "ab#c", t = "ad#c"
输出:true
解释:s 和 t 都会变成 "ac"。

示例 2:

输入:s = "ab##", t = "c#d#"
输出:true
解释:s 和 t 都会变成 ""。

示例 3:

输入:s = "a#c", t = "b"
输出:false
解释:s 会变成 "c",但 t 仍然是 "b"

代码

class Solution {public boolean backspaceCompare(String s, String t) {String ss = remove(s);  String tt = remove(t);return ss.equals(tt);}//remove函数用于把#退格处理掉,ab#c -> acpublic String remove(String s){//sb用于存储处理后的字符串StringBuilder sb = new StringBuilder();//遍历String字符串for(int i = 0;i < s.length();i++){char c = s.charAt(i); //获取第i个字符//如果不是#,加入sbif(c != '#'){sb.append(c);}//如果是#,要把sb最后一个元素删掉else{if(sb.length() != 0){  //防止sb长度为0,下标越界sb.deleteCharAt(sb.length()-1);}}}return sb.toString();}

总结

        核心是把字符串的退格处理掉再用equals比较s和t。处理方法是,用StringBuild对象接收处理后的字符串,遍历String,如果不是#就加入sb,如果是#就把sb最后一个元素删除。

        注意如果sb本身长度为0时,sb.deleteCharAt(sb.length()-1)可能导致下标-1越界,需要多个if处理。

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

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

相关文章

YOLO系列笔记(十四)——Compute Canada计算平台及其常见命令介绍

Compute Canada平台及其常见命令介绍 前言优势使用方法1. 检查模块不带版本号带版本号 2. 加载模块3. 检查模块是否加载成功4. 创建虚拟环境5. 编写作业脚本6. 提交作业7. 监控作业状态8. 查看作业开始预计时间9. 查看作业的详细输出10. 取消作业 注意结语 前言 大家好&#x…

【吃透Java手写】4-Tomcat-简易版

【吃透Java手写】Tomcat-简易版-源码解析 1 准备工作1.1 引入依赖1.2 创建一个Tomcat的启动类 2 线程池技术回顾2.1 线程池的使用流程2.2 线程池的参数2.2.1 任务队列&#xff08;workQueue&#xff09;2.2.2 线程工厂&#xff08;threadFactory&#xff09;2.2.3 拒绝策略&…

表面的相似,本质的不同

韩信与韩王信&#xff0c;两个韩信的结局都是被刘邦所杀&#xff0c;似乎结局类似。但是&#xff0c;略加分析&#xff0c;就会发现其中存在本质的区别。 韩信属于必杀。他的王位是要来的&#xff0c;有居功自傲的本意&#xff0c;功高震主而且毫不避讳。而且年轻&#xff0c;…

Acwing2024蓝桥杯FloodFill

AcWing 687. 扫雷 模拟以下样例(10X10): 把扫雷地图转变为数字记录的地图:地雷记作-1,其余表示8个方向有几个地雷,完成后如下图: 接着搜索所有0联通块(为红色矩形),并且把联通块附近不是地雷的点(红色圆形)全标记为-1,如下图: 而答案就是当前该图中大于0的数的数目之和,再加上…

《数据结构与算法之美》学习笔记一

前言&#xff1a;今天开始学习极客时间的课程《数据结构与算法之美》。为撒要学习这个&#xff1f;因为做力扣题太费劲了&#xff0c;自己的基础太差了&#xff01;所以要学习学习。开一个系列记录一下学习笔记。认真学吧&#xff0c;学有所获才不负韶华&#xff01;之前就学过…

【算法】滑动窗口——找到字符串中所有字母异位词

本节博客是对题目——找到字符串中所有字母异位词的从读题到代码实现以及优化的详细解读&#xff0c;有需要借鉴即可。 目录 1.题目2.滑动窗口 哈希数组3.异位词优化4.总结 1.题目 题目链接&#xff1a;LINK 首先来解释一下什么是异位词&#xff0c;所谓“异位词”&#xf…

show profile

功能 当你执行一个复杂的 SQL 查询时&#xff0c;这个命令可以帮助你了解查询的各个部分花费了多少时间&#xff0c;从而找到可能的性能瓶颈。默认情况下&#xff0c;参数处于关闭状态&#xff0c;并保存最近15次的运行结果 开启 查看是否支持 SHOW VARIABLES LIKE profili…

【XR806开发板试用】试用SWD+Jlink调试

XR806开发板&#xff0c;只能使用编写代码&#xff0c;然后通过UART下载&#xff0c;没法在线debug&#xff0c; 效率会差很多&#xff0c;官方没有提供这一方面的资料。 先查CPU&#xff0c; 官方介绍是arm-china的MC1&#xff0c;通过armv8 Architecture refenence manual资料…

Java SpringBoot 动态数据源

1. 原理 动态数据源&#xff0c;本质上是把多个数据源存储在一个 Map 中&#xff0c;当需要使用某一个数据源时&#xff0c;使用 key 获取指定数据源进行处理。而在 Spring 中已提供了抽象类 AbstractRoutingDataSource 来实现此功能&#xff0c;继承 AbstractRoutingDataSour…

跨境电商行业蓬勃发展,武汉星起航引领卖家孵化新潮流

近年来&#xff0c;我国跨境电商行业在政府的大力扶持下呈现出强劲的发展势头。随着国内制造业结构的加速调整与居民消费需求升级态势的持续凸显&#xff0c;跨境出口规模占比稳步提升&#xff0c;跨境进口规模同样不断扩大&#xff0c;行业市场规模持续增长。在这一背景下&…

系列介绍:《创意代码:Processing艺术编程之旅》

系列介绍&#xff1a;《创意代码&#xff1a;Processing艺术编程之旅》 标题创意&#xff1a; “代码绘梦&#xff1a;Processing艺术编程入门”“数字画布&#xff1a;用Processing创造视觉奇迹”“编程美学&#xff1a;Processing艺术创作指南”“创意编程&#xff1a;Proc…

nginx开启目录索引搭建文件服务器

目录索引 ngx_http_autoindex_module 模块可以支持目录列表浏览&#xff0c;开启方式 location / {autoindex on; }开启后就可以通过浏览器访问目录下的文件列表并且可以下载&#xff0c;像很多镜像资源站一样。可以文件浏览下载。这时候如果对某个目录不是所有用户可以访问下…

QT学习(4)——自定义控件

目录 引出自定义一个控件自定义控件定义方法函数widget窗口调用函数 总结 引出 QT学习&#xff08;4&#xff09;——自定义控件 自定义一个控件 自定义控件定义方法函数 #include "smallwid.h" #include "ui_smallwid.h"SmallWid::SmallWid(QWidget *par…

redis抖动问题导致延迟或者断开的处理方案

目录&#xff1a; 1、使用背景2、redis重试机制3、redis重连机制4、其他一些解决redis抖动问题方案 1、使用背景 客户反馈文件偶现打不开&#xff0c;报错现象是session not exist&#xff0c;最终定位是redis抖动导致的延迟/断开的现象&#xff0c;最终研发团方案是加入redis…

C# 集合(三) —— Stack/BitArray类

总目录 C# 语法总目录 集合三 Stack/BitArray 1. Stack2. BitArray 1. Stack 栈&#xff0c;先进后出 Stack<string> strArr new Stack<string>(); strArr.Push("tom"); strArr.Push("jerry"); strArr.Push("lily"); Console.Wri…

Mapreduce | 案例

根据提供的数据文件【test.log】 数据文件格式&#xff1a;姓名,语文成绩,数学成绩,英语成绩 完成如下2个案例&#xff1a; &#xff08;1&#xff09;求每个学科的平均成绩 &#xff08;2&#xff09;将三门课程中任意一门不及格的学生过滤出来 &#xff08;1&#xff09;求每…

Navicat安装配置(注册码)连接MySQL

下载资源 博主给你打包好了安装包&#xff0c;在网盘里&#xff0c;防止你下载到钓鱼软件 快说谢谢博主&#xff08;然后心甘情愿的点个赞~&#x1f60a;&#xff09; navicatformysql.zip_免费高速下载|百度网盘-分享无限制 (baidu.com) 安装流程 ①下载好压缩包后并解压 ② …

【JavaEE精炼宝库】多线程1(认识线程 | 创建线程 | Thread 类)

目录 一、认识线程 1.1 线程的概念&#xff1a; 1.2 为什么需要线程&#xff1a; 1.3 面试题.谈谈进程和线程的区别&#xff1a; 1.4 Java的线程和操作系统线程的关系&#xff1a; 二、创建线程 2.1 创建线程的5种写法&#xff1a; 2.1.1 写法1.继承 Thread 类&#xf…

【redis】Redis五种常用数据类型和内部编码,以及对String字符串类型的总结

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好&#xff0c;我是xiaoxie.希望你看完之后,有不足之处请多多谅解&#xff0c;让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

827. 最大人工岛

827. 最大人工岛 题目链接&#xff1a;827. 最大人工岛 代码如下&#xff1a; class Solution { public:int largestIsland(vector<vector<int>>& grid) {unordered_map<int,int> gridNum;int ngrid.size(), m grid[0].size();bool isAllGridtrue;//…