【算法】数组-移除元素

news2024/9/23 5:35:31

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。

不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并原地修改输入数组。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。 你不需要考虑数组中超出新长度后面的元素。

示例 2: 给定 nums = [0,1,2,2,3,0,4,2], val = 2, 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。

题目力扣编号27

数组是一组连续的存储空间,如果按照人类大脑惯性思维去直接删除是不可行的,机器上的数组删除应该是下图类型:

用后一个元素往前覆盖,最后剩的那一个元素不做处理。

①暴力法,用两层for循环

package com.example.algorithm;

public class ArrayRemoveElement {
public static void main(String[] args) {
ArrayRemoveElement arrayRemoveElement = new ArrayRemoveElement();
int[] nums = {0, 1, 2, 2, 3, 0, 4, 2};
int val = 2;
int newSize = arrayRemoveElement.removeElement(nums, val);
System.out.println("New size: " + newSize);
System.out.print("Updated nums: ");
for (int i = 0; i < newSize; i++) {
System.out.print(nums[i] + " ");
}


}

public int removeElement(int[] nums, int val) {
int size = nums.length;
for (int i = 0; i < nums.length; i++) {
if (nums[i] == val) {
for (int j = i + 1; j < nums.length -1; j++) { // 最后一个不前移
nums[j - 1] = nums[j]; //关键代码,如何前移
}
nums[nums.length - 1] = 0; //给最后一个赋值
size--;
i--;
}

}
return size;
}
}

②双指针,用一层for循环,另一层循环用双指针代替

package com.example.algorithm;

public class ArrayRemoveDoublePointer {
public static void main(String[] args) {
ArrayRemoveDoublePointer arrayRemoveDoublePointer = new ArrayRemoveDoublePointer();
int[] nums = {0, 1, 2, 2, 3, 0, 4, 2};
int val = 2;
int newSize = arrayRemoveDoublePointer.removeElement(nums, val);
System.out.println("New size: " + newSize);
System.out.print("Updated nums: ");
for (int i = 0; i < newSize; i++) {
System.out.print(nums[i] + " ");
}
}

public int removeElement(int[] nums, int val) {
int slowIndex = 0; //慢指针,记录位置
for (int fastIndex = 0; fastIndex < nums.length; fastIndex++) {
if (nums[fastIndex] != val) { //快指针把不是要找的值都存下来,要找的值都忽略,最后剩下来就是除了要找的那些值除外的其他值
nums[slowIndex] = nums[fastIndex];
slowIndex++;

}
}
return slowIndex;
}
}

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

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

相关文章

Java的IO之BIO

Java IO流是用于处理输入和输出的机制&#xff0c;用于读取和写入数据。Java提供了丰富的IO类和接口&#xff0c;用于处理不同类型的数据和操作。Java中的IO模型主要分为BIO和NIO两种&#xff0c;他们可以分别被视为IO编程的不同风格或模式&#xff0c;并非IO流具体的类型&…

云计算2主从数据库

设置主从数据库的目的是将数据库1和数据库2分别建在两个虚拟机上&#xff0c;并实现数据互通访问 首先准备两个虚拟机&#xff0c;这里示例ip分别为&#xff1a; 192.168.200.10&#xff1b;192.168.200.20 修改主机名&#xff0c;一个是mysql1&#xff0c;一个是mysql2&#x…

除了Confluence,还有哪些好用的知识库平台

大家都知道&#xff0c;Confluence作为知识库平台界的佼佼者&#xff0c;确实给我们带来了不少便利。但好东西总是层出不穷&#xff0c;除了Confluence&#xff0c;市面上还有其他好用的知识库平台也值得我们去尝试。今天&#xff0c;我就给大家聊聊我个人用过并且觉得挺不错的…

Vue+Element UI 开发PC端页面,出现页面抖动原因及解决办法

问题描述&#xff1a; 页面 拖动 放大放小&#xff0c;出现页面抖动&#xff0c;屏幕不停闪动 解决方案&#xff1a; 1.找到相对应的页面的div 加上样式&#xff1a; .app-container {height: 100%;overflow: auto;margin: 0; //加上这个把滚动条隐藏掉&#xff0c;否则就…

PHP页面如何实现设置独立访问密码

PHP网页如果需要查看信息必须输入密码&#xff0c;验证后才可显示出内容的代码如何实现&#xff1f; 对某些php页面设置单独的访问密码,如果密码不正确则无法查看内容,相当于对页面进行了一个加密。 如何实现这个效果&#xff0c;详细教程可以参考&#xff1a;PHP页面如何实现…

香港科技大学(广州)先进材料学域可持续能源与环境学域智能制造学域博士招生宣讲会——北京专场(暨全额奖学金政策)

三个学域代表教授亲临现场&#xff0c;面对面答疑解惑助攻申请&#xff01;可带简历现场咨询和面试&#xff01; &#x1f4b0;一经录取&#xff0c;享全额奖学金1.5万/月&#xff01; 报名链接&#xff1a; https://www.wjx.top/vm/wF2Mant.aspx# 地点&#xff1a;中关村皇冠…

【免费】如何考取《鲸鸿动能广告初级优化师》认证(详细教程)

鲸鸿动能广告初级优化师认证考试PC网址 初级&#xff1a;鲸鸿动能广告初级优化师认证-华为开发者学堂 (huawei.com) 注&#xff1a;免费认证&#xff0c;里面包含免费的课程&#xff0c;浏览器用Edge。 文章目录 鲸鸿动能广告初级优化师认证考试网址 前言 一、备考流程 二…

C++ Qt开发:QProcess进程管理模块

Qt 是一个跨平台C图形界面开发库&#xff0c;利用Qt可以快速开发跨平台窗体应用程序&#xff0c;在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置&#xff0c;实现图形化开发极大的方便了开发效率&#xff0c;本章将重点介绍如何运用QProcess组件实现针对进程的控制管理…

“找不到msvcr100.dll”或“msvcr100.dll丢失”的多种解决方法分享

当计算机系统中msvcr100.dll文件发生丢失时&#xff0c;导致某些应用程序无法正常运行。msvcr100.dll是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于Windows操作系统的应用程序正常运行至关重要。小编将介绍5种解决msvcr100.dll丢失问题的方法…

由于找不到vcruntime140.dll无法继续执行

如果你发现在Windows操作系统中缺少vcruntime140.dll文件&#xff0c;可能会对你打开某些应用程序或媒体文件造成困扰。在本文中&#xff0c;我们将介绍vcruntime140.dll是什么及其作用&#xff0c;以及缺失该文件时可能会遇到的问题。同时&#xff0c;我们还将探讨解决此问题的…

低代码开发平台开源:依靠科技力量实现数字化转型!

在竞争激烈的当今社会&#xff0c;数字化转型、流程化办公等字眼早已充斥在我们的职场生活中。虽然如此&#xff0c;但是我们依然要面临着这样一个现实问题&#xff1a;很多中小企业发展面临着资源有限、技术储备不足、人才短缺的现实问题&#xff0c;进入流程化办公困境依然明…

huggingface的transformers训练gpt

目录 1.原理 2.安装 3.运行 ​编辑 4.数据集 ​编辑 4.代码 4.1 model init​编辑 forward&#xff1a; 总结&#xff1a; 关于loss和因果语言模型&#xff1a; ​编辑 交叉熵&#xff1a;​编辑 记录一下transformers库训练gpt的过程。 transformers/examples/…

【每日一问】IOS手机上Charles证书过期怎么办?

1、如何查看证书是否过期? 设置>通用>VPN与设备管理 2、在Charles中重置证书 步骤1&#xff1a;重置证书 Help>SSL Proxying>Reset Charles Root Certificate… 步骤2&#xff1a;在浏览器中&#xff0c;下载证书 首先&#xff0c;手机连上代理&#xff0c;然…

【前端】多个标签省略效果

简言 多个标签省略效果实现 标签省略 有的时候我们想实现省略标签多余的标签&#xff0c;且不显示省略的内容。 有个简单快速的实现方法&#xff1a; 将标签用span元素实现&#xff0c;block元素文本省略可以包含span子元素。 示例 <!DOCTYPE html> <html lang&…

【笔记】Python学习记录

Python学习记录 Hello World变量简单数据类型字符串大小写转换插入变量Tab和Enter删除前后空格删除前后缀 Hello World 老调调了&#xff0c;如何在终端输出信息呢&#xff1f; print("Hello World")Hello World变量 变量命名遵从代码变量命名通则&#xff0c;几乎…

绿色节能|AIRIOT智慧建材能耗管理解决方案

建材供应是建筑业不可或缺的一个重要环节&#xff0c;在环保和企业可持续发展的双重需求下&#xff0c;建材生产商对建材生产过程中的能耗掌握和能耗管理尤其关注。但在实际生产和运营过程中&#xff0c;传统的建材能耗管理方式往往存在如下痛点&#xff1a; 用户管理权限不完善…

【MySQL】存储过程、存储函数、触发器

目录 存储过程介绍技术背景存储过程的作用与优势存储过程跟自定义函数很像。它们的区别是&#xff1a; 存储过程的缺点存储过程的特性基本存储过程使用1.创建语法语法说明&#xff1a;使用案例1.创建获取新闻类别数量的存储过程2.创建获取指定新闻类别ID下新闻数量的存储过程 2…

面向对象的三大特性-----封装、继承、多态(Java篇)

&#x1f341; 个人主页&#xff1a;爱编程的Tom&#x1f4ab; 本篇博文收录专栏&#xff1a;Java专栏&#x1f449; 目前其它专栏&#xff1a;c系列小游戏 c语言系列--万物的开始_ &#x1f389; 欢迎 &#x1f44d;点赞✍评论⭐收藏&#x1f496;三连支持一…

安科瑞ADL逆流检测多功能电表

ADL400 导轨式多功能电能表&#xff0c;是主要针对电力系统&#xff0c;工矿企业&#xff0c;公用设施的电能统计、管理需求而设计的一款智能仪表&#xff0c;产品具有精度高、体积小、安装方便等优点。集成常见电力参数测量及电能计量及考核管理&#xff0c;提供上48月的各类电…

使用appuploder上架App Store流程

使用appuploder流程笔记 1.如何没有账号去apple官网注册一个&#xff0c;地址&#xff1a;https://developer.apple.com/account 2.下载解压appuploder&#xff0c;双击打开&#xff0c;用刚刚注册的账号登录&#xff0c;下载地址&#xff1a;http://www.applicationloader.n…