首页 > 其他分享 >Leetcode 27. 移除元素(Remove Element)

Leetcode 27. 移除元素(Remove Element)

时间:2023-08-10 23:36:44浏览次数:113  
标签:27 val nums int 元素 Remove right 数组 移除

题目链接
给你一个数组nums和一个值val, 你需要原地移除所有数值等于val的元素, 并返回移除后数组的新长度.
不要使用额外的数组空间, 你必须仅使用O(1)额外空间并原地修改输入数组.
元素的顺序可以改变. 你不需要考虑数组中超出新长度后面的元素.
说明:
为什么返回数值是整数,但输出的答案是数组呢?
请注意,输入数组是以「引用」方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
int len = removeElement(nums, val);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中 该长度范围内 的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

示例 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

思路

这道题最简单的解法是直接使用两个for循环暴力破解, 时间复杂度为O(n^2), 空间复杂度为O(1).
第二种思路是快慢指针, 也就是定义两个变量在一个for循环中完成两个for循环的工作.
在这道题中这两个变量分别用于寻找新数组的元素和更新数组.
代码如下:

class Solution {
    public int removeElement(int[] nums, int val) {
        int left = 0;
        int right = 0;
        while(right < nums.length) {
            if(nums[right] != val) {
                nums[left] = nums[right];
                left++;
                right++;
            } else {
                right++;
            }
        }
        return left;
    }
}

标签:27,val,nums,int,元素,Remove,right,数组,移除
From: https://www.cnblogs.com/ahci316/p/17621878.html

相关文章

  • LeetCode -- 827. 最大人工岛
      题目大意:给一个邻接矩阵,问改变一个点后,最大连通块多大对于这种连通块相关问题,一般的思路就是进行深搜和并查集,这里采用并查集维护连通块大小解法。首先先初始化并查集,并进行连通块的合并;再对图中的0进行枚举,找到最大的连通块即可。对(n*m)的二维点阵图常用技巧,二维转一......
  • K8S 1.27.1版本初始化配置文件时报your configuration file uses an old API spec: "k
    现象:yourconfigurationfileusesanoldAPIspec:"kubeadm.k8s.io/v1beta2".Pleaseusekubeadmv1.22insteadandrun'kubeadmconfigmigrate--old-configold.yaml--new-confignew.yaml',whichwillwritethenew,similarspecusingan......
  • 代码随想录算法训练营第一天| 704. 二分查找、27. 移除元素
    704二分查找题目给定一个n个元素有序的(升序)整型数组nums和一个目标值target,写一个函数搜索nums中的target,如果目标值存在返回下标,否则返回-1。第一想法判断条件是value=target因为数组是升序,其实每种查找方法应该相差不大?不过题目都标了二分查找了emmm思......
  • 实践指南-前端性能提升 270%
    一、背景当我们疲于开发一个接一个的需求时,很容易忘记去关注网站的性能,到了某一个节点,猛地发现,随着越来越多代码的堆积,网站变得越来越慢。本文就是从这样的一个背景出发,着手优化网站的前端性能,并总结出一套开发习惯,让我们在日常开发时,也保持高性能,而不是又一次回过头来优化性能......
  • abc227e
    E-Swap首先我们注意到,加入我们想要一个串T,那么最小步数是唯一的。设\(f[i][j][e][y]\)表示当前到第i个字符,一共用掉了j次,前面有e个E,y个Y。然后转移即可,因为k不会大于\(n^2\),预处理第x个字符的位置即可。#include<algorithm>#include<cstdio>#include<cstring>#include<ma......
  • 外设移除区别/终端记录/重设密码/python测试/数据拷贝最大限度
    1.1【卸载】【弹出】【安全移除驱动器】区别【卸载】只是解除挂载(可以直接重新挂载)【弹出】弹出读卡器里面的存储卡(需要重新插入存储卡)【安全移除驱动器】断掉设备电源,移除设备(需要重新插入设备)1.2记录你的终端操作──script   (点击详细)如果过程不是很长,一屏以内的话一......
  • r7 7730u和i7 12700h差距 锐龙r77730u和酷睿i712700h对比
    AMD锐龙77730U采用Barcelo8核心/16线程主频2.0GHz最高频率4.5GHz三级缓存运行内存16M内存类型LPDDR4X内存频率4266MHz笔记本cpu选r77730u还是i712700h这些点很重要http://www.adiannao.cn/dyi712700H参数配置:10nm工艺制程,6个大核8个小核,14核心20线程,3.5GHz的主频,4.7GH......
  • js 添加和移除disabled属性
    //js的方式//动态修改元素disabled属性functiondisableTest(element,val){document.getElementById(element).disabled=val;}document.getElementById("uid").disabled="";//启用document.getElementById("uid").disabled="disabled"......
  • python:安装backgroundremover 0.2.4(Python 3.9.16)
    一,官方代码及文档:https://github.com/nadermx/backgroundremover二,安装backgroundremover的准备工作1,安装pytorch:https://blog.imgtouch.com/index.php/2023/08/03/rocky-linux-an-zhuang-pytorch-pytorch-2-1-python-3-9-16/2, 安装ffmpeg:https://blog.imgtouch.......
  • Vue3+ElementPlus,Module parse failed: Unexpected token (3:27)
    一、环境vue3,ElementPlus,@vue/cli5.0.8,npm 9.6.7。我在复制elementplus官网的一些代码到vue3框架里测试时出现的问题。二、不报错方法图片位置删除lang=“ts”就不报错了 ......