Leetcode JAVA刷刷站(27)移除元素

一、题目概述

二、思路方向

为了解决这个问题,你可以使用双指针的方法来原地移除所有等于 val 的元素,并返回不等于 val 的元素数量。

三、代码实现

java 复制代码
public class Solution {  
    public int removeElement(int[] nums, int val) {  
        int left = 0; // 左指针,指向不等于val的元素应该存放的位置  
        for (int right = 0; right < nums.length; right++) { // 右指针,遍历数组  
            if (nums[right] != val) { // 如果当前元素不等于val  
                nums[left] = nums[right]; // 将当前元素放到左指针的位置  
                left++; // 左指针向右移动一位  
            }  
        }  
        return left; // 左指针的位置就是不等于val的元素数量  
    }  
  
    public static void main(String[] args) {  
        Solution solution = new Solution();  
        int[] nums = {3, 2, 2, 3};  
        int val = 3;  
        int k = solution.removeElement(nums, val);  
        System.out.println("不等于val的元素数量:" + k);  
        System.out.println("修改后的数组(前k个元素):");  
        for (int i = 0; i < k; i++) {  
            System.out.print(nums[i] + " ");  
        }  
    }  
}

执行结果:

四、小结

在这个实现中,我们使用两个指针,leftrightleft 指针始终指向下一个不等于 val 的元素应该存放的位置,而 right 指针用于遍历整个数组。当遍历到不等于 val 的元素时,我们将其复制到 left 指针指向的位置,并将 left 指针向右移动一位。这样,遍历结束后,数组的前 left 个位置就是所有不等于 val 的元素,而 left 的值就是这些元素的总数。

这种方法的时间复杂度是 O(n),其中 n 是数组 nums 的长度,因为我们只需要遍历数组一次。空间复杂度是 O(1),因为我们直接在原数组上进行修改,没有使用额外的空间(除了几个用于迭代的变量)。

结语

我们永远无法估摸某一刻的价值

直到其成为回忆

!!!

相关推荐
Aaron15885 分钟前
全频段 SDR干扰源模块解决方案(星链干扰、LORA无人机干扰)
人工智能·算法·fpga开发·硬件架构·硬件工程·无人机·信息与通信
AI科技星9 分钟前
全域数学·球面拓扑微扰标准系数η=0.01 应用详解(典籍正式版)
人工智能·算法·数学建模·数据挖掘·机器人
微风欲寻竹影10 分钟前
Java数据结构——栈(Stack)详解
java·开发语言·数据结构
Makoto_Kimur13 分钟前
Java 后端面试场景题:页面刷新后一直转圈,应该怎么排查?
java·开发语言·面试
逻辑君24 分钟前
物理学研究报告【20260001】
人工智能·算法
ch.ju27 分钟前
Java Programming Chapter 3——Default value of array
java·开发语言
YL2004042629 分钟前
041二叉树的层序遍历
数据结构·leetcode·bfs
AI科技星33 分钟前
算法联盟·全域数学公理体系下黑洞标量毛发与LVK引力波O4全维理论、求导、证明、计算、验证、分析
人工智能·线性代数·算法·架构·学习方法·量子计算
谙弆悕博士33 分钟前
【附C语言源码】C语言 栈结构 实现及其扩展操作
c语言·开发语言·数据结构·算法·链表·指针·
bandaoyu35 分钟前
【CUDA】store/load普通访存 vs 非临时(Non-Temporal)访存
java·开发语言·redis