「力扣」27. 移除元素

C语言编写Picard迭代和牛顿迭代法 为了完成学校计算方法的作业,花了两个多星期将所有实验报告编写出来,看到同桌找代码的辛苦,优快云也没有这类代码,我只是一时兴起,想分享我写的代码与大家共飨,有错误还请多多指正,代码都不难,也是为了让优快云帮我保存下,我辛辛苦苦做出来的,倘若能给别人带来一丝一毫的帮助,我都万分荣幸。 1:什么是Picard迭代 先弄一个满足f(x) = 0的函数将其转化为x= 正在上传… 重新上传 取消 ... 阅读详情

「力扣」27. 移除元素

题目描述

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

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

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

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以**「引用」**方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
int len = removeElement(nums, val);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

示例 1:

输入: nums = [3,2,2,3], val = 3
输出: 2, nums = [2,2]
解释: 函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。例如,函数返回的新长度为 2 ,而 nums = [2,2,3,3] 或 nums = [2,2,0,0],也会被视作正确答案。

示例 2:

输入: nums = [0,1,2,2,3,0,4,2], val = 2
输出: 5, nums = [0,1,3,0,4]
解释: 函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

提示:

  • 0 <= nums.length <= 100
  • 0 <= nums[i] <= 50
  • 0 <= val <= 100

题解

双指针

该题有三个要求:

  1. 原地操作,空间复杂度为O(1)
  2. 返回删除后数组的长度。
  3. 符合条件的元素在数组的前面部分。

这个题跟26. 删除有序数组中的重复项解法类似,代码如下:

class Solution {
    public int removeElement(int[] nums, int val) {
        int k = 0;
        for(int i = 0; i < nums.length; i++) {
            if (nums[i] != val) {
                nums[k++] = nums[i];
            }
        }
        return k;
    }
}

提交结果:

image.png

时间复杂度是O(n),空间复杂度是O(1)。

双指针优化

看了官方题解,给了一个双指针优化,我表示并没有想到,没想到没关系,自己琢磨下吧。

解法1中保证了删除元素后剩下的元素顺序没有变化,比如 nums = [1, 2, 3, 4], val = 1,那么按照解法1中的方法,则需要将2、3、4元素都向前移动一位,但是题目中明确说明元素的顺序可以改变,所以我们只需要将4赋值给索引为0的位置即可,结果就是[4,2,3,4],明显是服务题目要求的,结果是3。

  1. 需要定义两个指针,一个指针从头开始low,初始值是0,一个指针从尾开始high,初始值是元素的长度。
  2. 如果头指针位置的值与val不相等,那就直接指针后移即可。
  3. 如果头指针位置的值与val相等,此时说明该元素应该被删除,此时就用high - 1的位置覆盖low位置的值即可,右指针向左移动一位。
  4. 当low < high不成立的时候,循环结束,最终返回low就是问题的答案。
class Solution {
    public int removeElement(int[] nums, int val) {
        int low = 0;
        int high = nums.length;
        while(low < high) {
            if (nums[low] == val) {
                nums[low] = nums[high - 1];
                high--;
            } else {
                low++;
            }
        }
        return low;
    }
}

提交结果如下:
双指针优化

时间复杂度和空间复杂度其实跟解法1是一样的。

卡尔曼滤波原理详解及系统模型建立(simulink) 卡尔曼滤波原理详解及系统模型建立(simulink) 卡尔曼滤波器 卡尔曼滤波器是在上个世界五六十年代的时候提出的,到今天已经有六十年左右的时间,但卡尔曼滤波算法不管在控制、制导、导航或者通讯方面对数据的预测能力依然处在一个不可撼动的位置上,但是很多人对于其算法内部的工作原理究竟是怎么运作的依然不理解,所以在工程上很多人都只是把卡尔曼滤波当成是一种“黑箱”预测算法,并不清楚内部原理。但实际上没有任... 阅读详情

相关推荐

双臂复合机器人眼在手外标定实战:从原理到D435标定流程详解

本文详细解析了双臂复合机器人中眼在手外标定的核心原理与实战流程。通过阐述坐标系转换与AX=XB方程,重点介绍了使用Intel RealSense D435相机进行标定的完整步骤,包括环境搭建、数据采集、计算与验证,并提供了关键的避坑指南,帮助工程师实现相机与机械臂基座间的精确坐标对齐。

weixin_29100927的博客 447

【leetcode】27. 移除元素。 「双指针」

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 说明: 为什么返回数值是整数,但输出的答案是数组呢? 请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。 你可以想象内部操作如下: // nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝 int l

Khalil三省的博客妙妙屋 266

PLC模拟量输入电路设计:±10V与±20mA信号调理全解析

在工业自动化和数据采集系统中,模拟量输入是连接物理世界与数字控制的核心桥梁。无论是变送器输出的4-20mA电流环,还是伺服驱动与信号发生器提供的±10V电压信号,PLC和采集模块都需要在复杂现场环境下稳定、精准地完成信号采集。理解信号体制的原理——电流环抗长线干扰、电压环响应快——是设计模拟输入前端的基础。通过精密电阻网络实现分压与采样,利用运放完成双极性到单极性的电平搬移,配合TVS与滤波电路保障可靠性,并经过ADC量化与校准流程,最终构建出兼顾精度、成本和工业级鲁棒性的完整信号链路。本文面向硬件工程师与

weixin_29163797的博客 297

leetcode面试经典150题“27移除元素”-双指针Java解答

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

wwwwwmmn的博客 581

VS2022打包C#安装包(最新、最全)

VS2022打包C#安装包(最新、最全)

qq_37959253的博客 9895

非凸问题的求解方法以及连续凸逼近SCA(Successive Convex Approximation)方法

非凸问题的求解方法 针对形如下式的函数: min⁡x∈XV(x)=F(x)+G(x)\min\limits_{{\bf{x}}\in X} V(x)=F(x)+G(x)x∈Xmin​V(x)=F(x)+G(x); 其中F为光滑的(不一定convex),G是convex的但是可能不可微,且存在:对于n维实矢量空间,有X=X1×...×XNX=X_1 \times...\times X_NX=X1​×...×XN​; x=(x1,...,xN)\bf{x} =(x_1,...,x_N)x=(x1​,...,xN

weixin_44535200的博客 2万+

力扣27题 移除元素 python的三种解法

力扣27题 移除元素暴力解法双指针三行解法   给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。   不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。   元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 输入:nums = [3,2,2,3], val = 3 输出:2, nums = [2,2] 解释:函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑

银域果酒的博客 1369

StarRocks FE启动异常

服务器断电,StarRocks FE 启动失败。

qq_15138049的博客 1112

【数组】力扣27题:移除元素

建议在看题目之前先了解数组的具体知识点,可以看这里: [算法基础(二):数组知识点及题型讲解]

niexinyu0026的博客 892

华为od 面试八股文_测试/测试开发_02_含答案

华为od 面试八股文_测试/测试开发_02_含答案

MISAYAONE的博客 2160

高性能C#上位机:多串口并发,百万数据不卡顿

去年做了一个环境监测项目,要对接32个串口传感器,每个传感器每秒发10条数据,一天下来就是2700多万条数据,之前的老程序跑起来UI直接卡死,数据丢包率高达10%,存到数据库要卡半天,客户要求数据丢包率为0,UI响应延迟≤100ms,百万级数据查询≤1s。这套多串口通信方案已经用在了我们公司10多个项目上,最多支持64个串口同时并发,每秒处理3000条数据,完全不卡顿,数据零丢包,客户非常满意,最近做的一个光伏监测项目,对接了48个串口传感器,稳定运行了6个月,没有出过任何问题。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 423

leetcode:27. 移除元素

题目来源 leetcode 题目描述 题目解析 双指针 public static int removeElement(int[] nums, int val) { if (nums == null || nums.length == 0){ return 0; } int low = 0; int...

OceanStar的博客 423

uniapp微信小程序开发:解决Video播放m3u8视频流非卡顿问题,使用video视频标签播放M3U8视频流或直播流总是加载一卡一卡的体验非常差的情况【多种优化方案提升流畅度和缓冲方案示例源码】

uniapp微信小程序video播放m3u8视频流卡,uniapp video在微信小程序播放m3u8格式视频总是加载频繁卡顿,Uniapp微信小程序苹果ios真机播放m3u8很卡加载不流畅怎么办,uni-App如何解决小程序端video播放视频流M3U8格式出现卡顿情况,uniapp播放m3u8直播流卡顿如何优化?uniapp m3u8格式视频加载,.m3u8监控视频,uniapp微信小程序使用video组件播放M3U8视频卡顿,uniapp微信小程序视频播放卡顿如何解决,uniapp 打包微信小程序播放

✅ 精选推荐文章 2987

LeetCode——27. 移除元素(数组)

文章目录27. 移除元素题目数组元素移除的常见思路**代码** 27. 移除元素 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/remove-element 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 题目 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。

李霁明的博客 515

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【LeetCode 刷题日记】Day 1 | 27. 移除元素:从“倒冒泡搬运”到双指针一次扫描

外层循环有些冗余,本质是多次全扫描,时间复杂度 O(n²)。“既然要去掉某些元素,那我能不能把这些元素全都换到数组末尾,然后直接返回前面的长度?为了尽可能的减少循环,减小时间复杂度。画图分析后发现,可以采用双指针的方式。于是我想起了冒泡排序的思路——每轮把一个最大值“沉”到最后。时间复杂度 O(n),空间 O(1),代码也干净很多。看到很多博主在 优快云 记录成长,我也想试试。开始用博客记录刷题,今天打卡第 1 天。当成需要沉下去的“重元素”。刚入门新人,作为个人记录。的元素,返回新长度。

2302_81784927的博客 306

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

LeetCode-[27] 移除元素

@lc app=leetcode.cn id=27 lang=java [27] 移除元素 https://leetcode-cn.com/problems/remove-element/description/ algorithms Easy (54.05%) Total Accepted: 47.9K Total Submissions: 88.4K Testcase Examp...

fffzlfk的博客 195

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

LeetCode27. 移除元素

LeetCode27. 移除元素 题目描述 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长...

肉肉的大果果 136

前端与算法 leetcode 27.移除元素

目录前端与算法 leetcode 27.移除元素题目描述概要提示解析算法 前端与算法 leetcode 27.移除元素 题目描述 27.移除元素 概要 题目本身其实挺简单的,官方解答也说道了人们可能会对"就地"一次感到困惑,并认为在不复制数组的情况下从数组中删除元素是不可能的 提示 双指针,仅返回长度,元素顺序可以更改,元素很少时 解析 把题中的就地删除理解为覆盖,也就是说,只要我们找到一个和v...

墨抒颖 275

【LeetCode_27】移除元素

LeetCode第27题「移除元素」的C++解法

有梦想的电信狗 1359

LeetCode- 27 - 移除元素

*题解思路:**使用双指针。前面一个指针指向数组的起点,负责判断是否等于val;后面一个指针在数组的最后。​ 当起点的指针等于val,交换 i 和 j 位置的元素。元素的顺序可能发生改变。

Arbicoral的博客 459

LeetCode 27.移除元素

LeetCode 27.移除元素 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 1: 给定 nums = [3,2,2,3], val = 3, 函数应该返回新的长度 2,...

UN_uomo的博客 156

LeetCode-双指针&移除元素-27

title: LeetCode-双指针&移除元素-27 categories: LeetCode tags: LeetCode 双指针 abbrlink: 276090df date: 2020-07-11 15:51:17 给你一个数组nums 和一个值 val,你需要 原地 移除所有数值等于val的元素,并返回移除后数组的新长度。 不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。 示例 示.

KawYang的博客 207

LeetCode #27. 移除元素

LeetCode #27. 移除元素I. Description:II. Solution:version 1解题思路:Code: I. Description: II. Solution: version 1 解题思路:   该题跟上一题比较类似,依然考虑使用上下两个指针 iii 和 jjj,用指针 iii 正常遍历数组,遇到要删除的目标值 iii 就正常后移,jjj 不动;遇到非目标值就用 iii 处的元素覆盖 jjj 处的元素, 然后 jjj 右移一位。 Code: cpp class S

daodao1991的博客 215

【力扣刷题】27. 移除元素(题解笔记)

在力扣上刷的第一道题 记录下大佬的题解

HeyRena的博客 368

【LeetCode】 27. Remove Element 移除元素(Easy)(JAVA)

【LeetCode】 27. Remove Element 移除元素(Easy)(JAVA) 题目地址: https://leetcode-cn.com/problems/remove-element/ 题目描述: Given an array nums and a value val, remove all instances of that value in-place and return...

qq_16927853的博客 226

LeetCode 移除元素

LeetCode 移除元素 题目 思路 首先,新定义一个数组,用循环将val除外的元素依次赋值到新的数组里,但此时题目要求了必须在原地修改,因此这种方法不适合。 然后我想到了用交换的方法,即把数组中所有的val,交换到数组的最后,用for循环控制数组数组中的元素移动,当元素的值是目标val时,进行替换,此时还要考虑交换之后的这个元素是否还是val,因此做一次i - -;让交换后的元素与val在...

weixin_45775788的博客 128
上一篇: 「力扣」26. 删除有序数组中的重复项
下一篇: 【力扣】28. 找出字符串中第一个匹配项的下标
「已注销」
博客等级 码龄3年 128粉丝 15原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值