移除元素

news2024/9/30 21:43:17

移除元素

题目链接:移除元素

示例 1:

输入:nums = [3,2,2,3], val = 3
输出:2, nums = [2,2,_,_]
解释:你的函数函数应该返回 k = 2, 并且 nums 中的前两个元素均为 2。
你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

示例 2:

输入:nums = [0,1,2,2,3,0,4,2], val = 2
输出:5, nums = [0,1,4,0,3,_,_,_]
解释:你的函数应该返回 k = 5,并且 nums 中的前五个元素为 0,0,1,3,4。
注意这五个元素可以任意顺序返回。
你在返回的 k 个元素之外留下了什么并不重要(因此它们并不计入评测)。

采用双指针算法,slow指针记录需要被覆盖的下表,fast指针去遍历数组。

代码:

class Solution {
    public int removeElement(int[] nums, int val) {
        int slowIndex=0;

        for(int fastIndex=0;fastIndex<nums.length;fastIndex++){
            if(nums[fastIndex]!=val){
                nums[slowIndex++]=nums[fastIndex];
            }
        }
        return slowIndex;
    }
}

GPT的解释

国内直接使用点我跳转

  • 使用一个指针遍历整个数组(称为 i),另一个指针(称为 k)记录当前可以放置有效元素的位置。
  • 每次遇到 nums[i] != val,就将 nums[i] 赋值到 nums[k],并递增 k,表示有效的元素数量增加。
  • 最后返回 k,它表示数组中不等于 val 的元素的数量。

Java 代码实现

class Solution {
    public int removeElement(int[] nums, int val) {
        // 初始化指针 k,表示当前有效元素应存放的位置
        int k = 0;
        
        // 遍历数组中的每一个元素
        for (int i = 0; i < nums.length; i++) {
            // 如果当前元素不等于目标值 val
            if (nums[i] != val) {
                // 将该元素放入 nums[k] 位置,k 随之递增
                nums[k] = nums[i];
                k++;
            }
        }
        
        // 返回 k,表示有效元素的个数
        return k;
    }
}

解释

  1. 指针 k 的作用

    • k 记录了新数组的下一个可放置位置。当遇到一个不等于 val 的元素时,nums[k] 被赋值为这个元素,k 然后递增。
  2. 遍历数组

    • 使用一个 for 循环遍历整个数组,当 nums[i] != val 时,我们就将该元素放到 nums[k] 的位置,并且将 k 递增。这样,所有有效元素(即不等于 val 的元素)都被移到了数组的前面。
  3. 时间复杂度

    • 该算法只遍历了数组一次,所以时间复杂度为 O(n),其中 n 是数组的长度。
  4. 空间复杂度

    • 该算法使用了常数级别的额外空间,即 O(1)。

示例1的解释:

输入:

nums = [3, 2, 2, 3], val = 3

执行步骤:

  1. i = 0nums[0] == 3,跳过。
  2. i = 1nums[1] == 2,放入 nums[0]k++
  3. i = 2nums[2] == 2,放入 nums[1]k++
  4. i = 3nums[3] == 3,跳过。

最后 k = 2,数组的前两个元素是 [2, 2]

示例2的解释:

输入:

nums = [0, 1, 2, 2, 3, 0, 4, 2], val = 2

执行步骤:

  1. i = 0nums[0] == 0,放入 nums[0]k++
  2. i = 1nums[1] == 1,放入 nums[1]k++
  3. i = 2nums[2] == 2,跳过。
  4. i = 3nums[3] == 2,跳过。
  5. i = 4nums[4] == 3,放入 nums[2]k++
  6. i = 5nums[5] == 0,放入 nums[3]k++
  7. i = 6nums[6] == 4,放入 nums[4]k++
  8. i = 7nums[7] == 2,跳过。

最终 k = 5,数组的前五个元素是 [0, 1, 3, 0, 4]

这个方法可以有效地解决问题,并且符合题目对时间和空间复杂度的要求。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2180782.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

URL从输入到⻚面显示的过程(详细版)

URL从输入到⻚面显示的过程&#xff08;详细版&#xff09; 浏览器中输入网址 DNS 解析域名得到 IP 地址 DNS 解析首先会从你的浏览器的缓存中去寻找是否有这个网址对应的 IP 地址&#xff0c;如果没有就向OS系统的 DNS 缓存中寻找&#xff0c;如果没有就是路由器的 DNS 缓存&…

C++之 友元重载 以及最常用的几种友元函数

在之前的友元中就曾经讲过&#xff0c;我们为了去访问修改私有成员中的数据时&#xff0c;只能通过公有的办法去进行访问操作&#xff0c;非常的局限。所以C引用了友元函数&#xff0c;只要加上friend关键字&#xff0c;C的这个类&#xff0c;会自动把这个函数的权限拉到类内&a…

无水印短视频素材下载网站有哪些?十个高清无水印视频素材网站分享

你知道怎么下载无水印视频素材吗&#xff1f;今天小编就给大家推荐十个高清无水印视频素材下载的网站&#xff0c;如果你也是苦于下载高清无水印的短视频素材&#xff0c;赶紧来看看吧&#xff5e; 1. 稻虎网 首推的是稻虎网。这个网站简直就是短视频创作者的宝库。无论你需要…

编程魔法:基于LLM的AI function开发,如何实现高效数据生成?

基于大语言模型&#xff08;LLM&#xff09;的AI function开发&#xff0c;简直就是现代编程界的“魔法棒”&#xff01; 你好&#xff0c;我是三桥君 最近三桥君有个任务&#xff0c;需要造一些测试数据&#xff0c;比如姓名、手机号、银行卡号、邮箱啥的&#xff0c;用来做测…

每日OJ题_牛客_添加逗号_模拟_C++_Java

目录 牛客_添加逗号_模拟 题目解析 C代码1 C代码2 Java代码 牛客_添加逗号_模拟 添加逗号_牛客题霸_牛客网 题目解析 读取输入&#xff1a;读取一行字符串。分割字符串&#xff1a;使用空格将字符串分割成单词数组。拼接字符串&#xff1a;将单词数组中的每个单词用逗号…

群晖安装Gitea(代码托管工具)

一、Gitea介绍 Gitea 是一款开源的轻量级代码托管平台,可以为团队和开发者提供了一个易于部署、运行快速、使用体验良好的自建 Git 服务。相比于其它自部署代码托管平台,Gitea 的设计更加轻量,对系统资源的占用相对较少,能够在较低配置的服务器上流畅运行。相比于其他代码…

嘉楠科技AI芯片K230-初探

勘智K230 介绍入门购买开发板 安装开机开发学习点亮第1个LED点亮屏幕预览摄像头代码离线运行 在线训练平台 参考 介绍 K230芯片是嘉楠科技 Kendryte系列AIoT芯片中的最新一代SoC产品。该芯片采用全新的多异构单元加速计算架构&#xff0c;集成了2个RISC-V高能效计算核心&#x…

Spring系列 BeanPostProcessor

文章目录 BeanPostProcessor注册时机执行时机 InstantiationAwareBeanPostProcessorSmartInstantiationAwareBeanPostProcessor 本文源码基于spring-beans-5.3.31 参考&#xff1a;https://docs.spring.io/spring-framework/reference/core/beans/factory-extension.html#beans…

【ASE】第四课_高亮显示效果(手动切换)

今天我们一起来学习ASE插件&#xff0c;希望各位点个关注&#xff0c;一起跟随我的步伐 今天我们来学习高亮的效果。 思路&#xff1a; 1.添加纹理贴图和法线贴图&#xff0c;环境光遮挡贴图 2.添加高亮的参数&#xff0c;并设置 3.手搓一个边缘光,通过高亮参数调节 4.将模…

微信小程序——音乐播放器

目的 掌握swiper组件、scroll-view组件的使用掌握image组件的使用掌握音频API的使用掌握slider组件的使用 内容 了音乐小程序项目的完整开发流程&#xff0c;其开发步骤包括页面结构的分析、样式的设计、组件的运用等。通过本章的学习&#xff0c;读者能够掌握小程序的基本交…

聚星文社——绘唐科技有什么区别!

聚星文社和绘唐科技是两个不同的公司&#xff0c;有一些区别。下面是它们的一些区别&#xff1a; 绘唐科技——聚星文社https://iimenvrieak.feishu.cn/docx/ZhRNdEWT6oGdCwxdhOPcdds7nof 行业领域&#xff1a;聚星文社主要从事文化娱乐行业&#xff0c;包括出版、影视制作等&…

点餐小程序实战教程14点餐功能

目录 1 功能分析2 初始化菜品的数量3 加入购物车4 显示购物车5 最终的效果总结 上一篇我们讲解了如果通过扫码实现餐桌信息显示&#xff0c;本篇我们介绍一下点餐的功能。 1 功能分析 点餐的话一般我们是在菜品点击号或者-号来加入购物车&#xff0c;加入购物车之后还可以修改…

APP 安全测试项总结

一、安装包测试 1.1、关于反编译 目的是为了保护公司的知识产权和安全方面的考虑等&#xff0c;一些程序开发人员会在源码中硬编码一些敏感信息&#xff0c;如密码。而且若程序内部一些设计欠佳的逻辑&#xff0c;也可能隐含漏洞&#xff0c;一旦源码泄漏&#xff0c;安全隐患…

Temporal Dynamic Quantization for Diffusion Models阅读

文章目录 AbstractIntroductionBackgrounds and Related Works2.1 扩散模型2.2 量化2.3 量化感知训练和训练后量化 TemporalDynamic Quantization3.1 量化方法3.2 扩散模型量化的挑战3.3 TDQ模块的实现3.4 工程细节时间步的频率编码TDQ模块的初始化 Experimental SetupResults5…

#git 问题failed to resolve head as a valid ref

问题如下&#xff1a; 解决方法&#xff1a; 1、运行 git fsck --full 可以查看具体error信息&#xff0c;一般都是head索引问题 2、.git\refs\heads\xxx&#xff08;当前分支&#xff09;txt编辑器打开显示乱码&#xff0c;而不是hash编码 3、在.git\logs\refs\heads\xxx&a…

如何评价 Python 语言的运行速度

Python 作为一门编程语言&#xff0c;其运行速度一直是业界讨论的焦点。它的简洁语法和广泛的应用使得它在开发过程中非常高效&#xff0c;然而&#xff0c;运行速度与一些更底层的编程语言相比存在一定的劣势。这是否是由于 Python 语法的简洁性所带来的代价&#xff1f;我们可…

心觉:自我暗示语“正确姿势”的科学解释

Hi&#xff0c;我是心觉&#xff0c;与你一起玩转潜意识、脑波音乐和吸引力法则&#xff0c;轻松掌控自己的人生&#xff01; 挑战每日一省写作185/1000天 “如何重塑高效学习的潜意识”这个系列文章其实昨天已经写完了 在写这个系列文章的时候&#xff0c;我突然有一个关于…

宠物空气净化器该怎么选?希喂、美的、有哈这三款有推荐的吗?

终于要到国庆了&#xff0c;这可是打工人除春节外最长的假期&#xff01;在外上班后&#xff0c;回家的次数越来越少了&#xff0c;这次国庆肯定要回去陪陪父母。这票是真难买啊&#xff0c;候补了我一个多星期才买到。本来以为最困难的问题已经解决了&#xff0c;又想到我家猫…

Mamba以及我们看的第一篇MambaOcc

0. 简介 深度学习架构有很多&#xff0c;但近些年最成功的莫过于 Transformer&#xff0c;其已经在多个应用领域确立了自己的主导地位。如此成功的一大关键推动力是注意力机制&#xff0c;这能让基于 Transformer 的模型关注与输入序列相关的部分&#xff0c;实现更好的上下文…

动手测试:CPU的L1~L3级缓存和内存的读取速度测试

引言 在许多文章中指出了这些缓存的架构&#xff0c;速度差异等。纸上得来终觉浅&#xff0c;今天想实际写代码简单测试一下。 背景 现代计算机系统中&#xff0c;CPU缓存&#xff08;L1、L2、L3&#xff09;和主内存&#xff08;RAM&#xff09;之间的读取速度有着显著的差…