题目:

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

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

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

说明:

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

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

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

1 // nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
2 int len = removeElement(nums, val);
3
4 // 在函数里修改输入数组对于调用者是可见的。
5 // 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
6 for (int i = 0; i < len; i++) {
7 print(nums[i]);
8 }

示例 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,4,0,3]
解释:函数应该返回新的长度 5, 并且 nums 中的前五个元素为 0, 1, 3, 0, 4。注意这五个元素可为任意顺序。你不需要考虑数组中超出新长度后面的元素。

提示:

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

来源:力扣(LeetCode)
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

【双指针】--快慢指针

  • 运用双指针,指针 i 和指针 j ,i代表新数组的下标,j代表新数组中的元素;
  • 当nums[j] != val 时,将nums[j]拷贝给nums[i],然后再让 i 指向下一个位置;否则,让 j 继续指向下一个位置,i不变。
  • 最终返回慢指针 i的值,即为新数组的长度。

java代码:

 1 class Solution {
2 public int removeElement(int[] nums, int val) {
3 int n = nums.length;
4 if (nums == null || n == 0) return 0;
5 int i = 0, j = 0;
6 while (j < n){
7 if (nums[j] != val){
8 nums[i] = nums[j];
9 i++;
10 }
11 j++;
12 }
13 return i;
14
15 }
16 }

二刷:2023-05-19

 1 class Solution {
2 public int removeElement(int[] nums, int val) {
3 if (nums == null || nums.length == 0) return 0;
4 int slow = 0;
5 for (int fast = 0; fast < nums.length; fast++){
6 if (nums[fast] == val){
7 continue;
8 }else {
9 nums[slow] = nums[fast];
10 slow++;
11 }
12 }
13 return slow;
14 }
15 }

python3代码:

1 class Solution:
2 def removeElement(self, nums: List[int], val: int) -> int:
3 i = 0
4 for j in range(len(nums)):
5 if nums[j] != val:
6 nums[i] = nums[j]
7 i += 1
8 return i

力扣27(java&python)-移除元素(简单)的更多相关文章

  1. 力扣(LeetCode)移除元素 个人题解

    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成 ...

  2. LeetCode~移除元素(简单)

    移除元素(简单) 1. 题目描述 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使 ...

  3. 力扣(LeetCode)移除链表元素 个人题解

    删除链表中等于给定值 val 的所有节点. 这题粗看并不困难,链表的特性让移除元素特别轻松,只用遇到和val相同的就跳过,将指针指向下一个,以此类推. 但是,一个比较麻烦的问题是,当链表所有元素都和v ...

  4. 力扣561. 数组拆分 I-C语言实现-简单题

    题目 传送门 给定长度为 2n 的整数数组 nums ,你的任务是将这些数分成 n 对, 例如 (a1, b1), (a2, b2), ..., (an, bn) ,使得从 1 到 n 的 min(a ...

  5. 力扣566. 重塑矩阵-C语言实现-简单题

    题目 传送门 在MATLAB中,有一个非常有用的函数 reshape,它可以将一个矩阵重塑为另一个大小不同的新矩阵,但保留其原始数据. 给出一个由二维数组表示的矩阵,以及两个正整数r和c,分别表示想要 ...

  6. 力扣832. 翻转图像-C语言实现-简单题

    题目 传送门 文本 给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果. 水平翻转图片就是将图片的每一行都进行翻转,即逆序.例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, ...

  7. 力扣896. 单调数列-C语言实现-简单题

    题目 传送门 文本 如果数组是单调递增或单调递减的,那么它是单调的. 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的. 如果对于所有 i <= j, ...

  8. LeetCode(27): 移除元素

    Easy! 题目描述: 给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度. 不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1 ...

  9. [LeetCode] 27. Remove Element 移除元素

    Given an array nums and a value val, remove all instances of that value in-place and return the new ...

  10. 力扣347——前 K 个高频元素

    这道题主要涉及的是对数据结构里哈希表.小顶堆的理解,优化时可以参考一些排序方法. 原题 给定一个非空的整数数组,返回其中出现频率前 k 高的元素. 示例 1: 输入: nums = [1,1,1,2, ...

随机推荐

  1. Android 优雅的Activity回调代码封装

    原文地址: Android 优雅的Activity回调代码封装 - Stars-One的杂货小窝 之前提到Jetpack架构组件学习(3)--Activity Results API使用 - Star ...

  2. [Atcoder - Distinct Trio ] 动态规划

    记f[i][j] 为前i个元素能构成的j个不同元素对的个数.对于题目j<=3;这样就有转移方程. import java.io.BufferedReader; import java.io.IO ...

  3. Openlayers 加载ArcGIS Server切片服务(自定义切片方案)

    背景 最近遇到一个需求,要使用OpenLayer加载ArcGIS Server发布的服务.如果直接拷贝OpenLayer提供的在线官方Demo,然后修改下地图服务地址是跑不通的,这是因为OpenLay ...

  4. 记录--uni-app adb安卓wifi无线调试

    这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 方法一 adb connect连接调试 前提条件: 电脑已安装adb工具 手机和电脑连接的同一个WIFI CMD进入到adb工具所在目录, ...

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

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QPr ...

  6. elementui中下拉框(select)抖动问题

    将下面样式加入即可 // 处理下拉框中抖动 .el-select .el-input__inner { vertical-align: bottom !important; } 如设置了size属性, ...

  7. 巧用dblink 实现多进程并行查询

    概述 对于分区表的大数据统计分析,由于数据量巨大,往往需要采用并行.但是数据库并行的效率相比分进程分表统计还是有比较大的差距.本文通过巧用dblink,实现分进程分分区统计数据. 例子 kingbas ...

  8. linux关闭主板警告声,蜂鸣声,滴滴声,pc扬声器。

    启动时,BIOS 通常会在开机自检期间发出蜂鸣声.较新的主板型号省略了开机自检蜂鸣声,以便快速启动进入操作系统.BIOS 通常允许切换开机自检蜂鸣声,但无法将 PC 扬声器配置为完全关闭.一旦系统启动 ...

  9. Nacos 服务发现,注册及管理

    Nacos Nacos(官网: https://nacos.io) 发现,注册及管理. Nacos 支持发现,配置及管理几乎所有类型的服务: Kubernetes Service gRPC | Dub ...

  10. #斜率优化,单调栈#洛谷 5504 [JSOI2011] 柠檬

    题目 分析 设\(dp[i]\)表示前\(i\)个贝壳可以获得的最大收益, 则\(dp[i]=\max\{dp[j-1]+S(c[i]-c[j]+1)^2\}[s_i==s_j]\) 可以发现当且仅当 ...