当前位置: 首页 > article >正文

leetcode 之(移除元素)

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

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

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

思路

使用左右双指针,左指针从左侧开始找需要移除的元素,右指针从右往左找不需要移动的元素,找到后,把右指针的值赋给当前左指针,然后继续往中间找:

  • 左右侧指针重合时:判断当前值是否需要移除 需要 返回指针索引值,不需要 返回 指针索引值+1;
  • 左指针在右指针右侧时:返回左指针索引值;
class Solution {
    public int removeElement(int[] nums, int val) {
        // 定义等于val 时的默认值
        // 双指针 前后指针
        int left = 0, right = nums.length - 1;
        while (left <= right) {
            // 如果左指针等于val 右指针不等于val
            if (val == nums[left] && val != nums[right]) {
                // 把右指针的值赋给左指针 移动左指针
                nums[left++] = nums[right--];
            } else if (val != nums[left]) {
                // 如果左指针不等于val 移动左指针
                left++;
            }
            // 如果右指针等于val,移动右指针
            if (val == nums[right]) {
                right--;
            }
            // 如果左指针位置不在右指针左侧,
            if (left >= right) {
                // 1.左指针位置在右指针左侧,说明已经全部移动完成,返回左指针位置(不包含当前位置)
                // 2.如果左右指针在同一位置 判断 当前位置的值是否等于val
                // 2.1 如果等于val 返回左指针位置(不包含当前位置)
                // 2.2 如果不等于val 返回 左指针位置+1(包含当前位置)
                return left > right || val == nums[left] ? left : ++left;
            }
        }
        return 0;
    }
}

复杂度

  • 时间复杂度: O(n)
  • 空间复杂度: O(1)

http://www.kler.cn/a/600622.html

相关文章:

  • 分布式架构-Spring技术如何能实现分布式事务
  • Matlab教程002:Matlab变量和基本运算符的使用
  • 【Redis】深入解析 Redis 五大数据结构
  • 【构建性能分析插件设计与实现:打造前端项目的性能透视镜】
  • Ubuntu Server版本Ubuntu 24.04.2 LTS下载与安装-详细教程,细致到每一步都有说明
  • 如何在jupyter notebook中使用django框架
  • 隔空打印,IPP,IPD,HP Jetdirect协议的区别(Mac添加打印机四种协议的区别)
  • 科学计算(2):矩阵特征值计算
  • 【Linux系统篇】:进程流水线的精密齿轮--创建,替换,终止与等待的工业级管控艺术
  • 【机器学习】线性回归和逻辑回归的区别在哪?
  • 什么是 LLM(大语言模型)?——从直觉到应用的全面解读
  • PHP eval 长度限制绕过与 Webshell 获取
  • 【linux】ubuntu 用户管理
  • javaSE.多维数组
  • 开发中后端返回下划线数据,要不要统一转驼峰?
  • CUDA 学习(3)——CUDA 初步实践
  • 基于Flask的通用登录注册模块,并代理跳转到目标网址
  • ANYmal Parkour: Learning Agile Navigation for Quadrupedal Robots
  • 投sci论文自己查重方法
  • wordpress主题开发框架(灵狐框架),开发文档使用教程