【算法】移除元素

今天讲的是力扣题目的题解:

力扣题目:
72.移除元素

题目描述:

给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。

假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作:

  • 更改 nums 数组,使 nums 的前 k 个元素包含不等于 val 的元素。nums 的其余元素和 nums 的大小并不重要。
  • 返回 k

核心思路:

使用快慢指针的思路,fast指向的是有效元素,slow指向的是新数组的下标

第一步:

定义一个慢指针:slow 指向的是新数组的下标

第二步:

定义一个快指针:fast 的目的是遍历数组的每一个元素,将不是val的有效元素赋值给slow的位置

第三步:

利用for循环,通过fast++来遍历整个数组

第四步:

当在循环的过程中,遇到不是val的有效元素,就将这个有效元素通过numsfast 来记录,进一步将这个有效元素赋值给slow的位置,让slow++,因为slow代表的在新数组中有效元素存放的位置

代码如下:

java 复制代码
int slow  = 0;

第一步:

定义一个慢指针:slow 指向的是新数组的下标

第二步:

定义一个快指针:fast 的目的是遍历数组的每一个元素,将不是val的有效元素赋值给slow的位置

java 复制代码
for(int fast = 0; fast < nums.length; fast++)

第三步:

利用for循环,通过fast++来遍历整个数组

第四步:

当在循环的过程中,遇到不是val的有效元素,就将这个有效元素通过numsfast 来记录,进一步将这个有效元素赋值给slow的位置,让slow++,因为slow代表的在新数组中有效元素存放的位置

java 复制代码
 if(nums[fast] != val){
    nums[slow] = nums[fast];
    slow++;
   }

完整代码如下所示:

java 复制代码
class Solution {

    public int removeElement(int[] nums, int val) {

        int slow  = 0;

        for(int fast = 0; fast < nums.length; fast++){

            if(nums[fast] != val){

                nums[slow] = nums[fast];

                slow++;

            }

        }

        return slow;

    }

}
相关推荐
库克克2 分钟前
【C++】set 与multiset
开发语言·c++
Wang's Blog14 分钟前
Go-Zero项目开发34: 微服务超时控制与重试机制实践
开发语言·微服务·golang·go-zero
ekkoalex32 分钟前
训练框架以及算法实现的框架
算法
DFT计算杂谈1 小时前
交错磁研究进展材料物性与交叉应用
数据库·人工智能·python·opencv·算法
玖玥拾1 小时前
LeetCode 26 删除有序数组中的重复项
算法·leetcode
2zcode1 小时前
项目文档:基于MATLAB神经网络的心力衰竭预测与临床辅助决策系统研究
开发语言·神经网络·matlab·心力衰竭预测\
Kina_C1 小时前
LVS负载均衡的十二种核心调度算法
linux·运维·算法·负载均衡·lvs
减瓦2 小时前
深入 Quarkus:云原生时代 Java 的重生之路
java·开发语言·云原生
杨运交2 小时前
[053][核心模块]Java枚举缓存与ORM集成实践
java·开发语言·缓存
hansang_IR2 小时前
【题解】[AGC020E] Encoding Subsets
c++·算法·dp