首页 > 其他分享 >27.移除元素

27.移除元素

时间:2023-08-28 22:14:16浏览次数:41  
标签:27 val nums 元素 数组 移除 长度

移除元素

给你一个数组 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

解题思路

并不需要真的删除,只需要将非val的元素移动到前面即可。使用双指针,一个指针指向数组的起点位置,一个指针来遍历数组。

  1. 遍历到!=val,移动到数组前端,并递增i和j
  2. 遍历到==val,递增j

code

class Solution {
public:
    
    int removeElement(vector<int>& nums, int val) {
        int i = 0,j = 0;

        while(j < nums.size())
        {
            if(nums[j] == val)
            {
                j++;
            }
            else
            {
                nums[i] = nums[j];
                i ++;
                j ++;
            }
        }

        return i;
    }
};

标签:27,val,nums,元素,数组,移除,长度
From: https://www.cnblogs.com/huangxk23/p/17663485.html

相关文章

  • python+playwright 学习-79 设置全局导航超时和全局查找元素超时
    前言playwright默认全局的导航时间是30秒,查找元素超时也是30秒,有以下几个方法设置全局超时时间:browser_context.set_default_navigation_timeout()browser_context.set_default_timeout()page.set_default_navigation_timeout()page.set_default_timeout()导航超时设置......
  • 按比例去分配3个容器里面的元素
    defround_3_1():a1=2;a2=3;a3=1;sum=a1+a2+a3;foriinrange(100):s=i%sum;ifs<a1:print("1");elifs<......
  • UE4.27, Debug issues, "变量已被优化掉,因而不可用"
    调试时添加监控后,变量未被成功监控,显示"变量已被优化掉,因而不可用" 所使用的解决办法从解决方案配置的下拉菜单中选择DebugGameEditor  感谢阅读,敬请斧正......
  • 数组二分查找:35. 搜索插入位置、34. 在排序数组中查找元素的第一个和最后一个位置
    35. 搜索插入位置1classSolution:2defsearchInsert(self,nums:List[int],target:int)->int:3left,right=0,len(nums)-145whileleft<=right:#左闭右闭6mid=left+(right-left)//27ifnum......
  • P2787 语文1(chin1)- 理理思维
    \(P2787\)语文\(1\)(\(chin1\))-理理思维题目背景蒟蒻\(HansBug\)在语文考场上,挠了无数次的头,可脑子里还是一片空白。一、题目描述考试开始了,可是蒟蒻\(HansBug\)脑中还是一片空白。哦不!准确的说是乱七八糟的。现在首要任务就是帮蒟蒻\(HansBug\)理理思维。假设\(HansB......
  • 哈希表基础题217. 存在重复元素、389. 找不同、496. 下一个更大元素 I
    217. 存在重复元素1classSolution:2defcontainsDuplicate(self,nums:List[int])->bool:3#方法1:set去重,直接比较去重之后数组长度4iflen(set(nums))!=len(nums):5returnTrue6else:7return......
  • 【2023-08-27】连岳摘抄
    23:59风起了,雨下了。荞叶落了,树叶黄了。春去秋来,心绪起伏。时光流转,岁月沧桑。不要怕不要怕,无论严寒或酷暑。不要怕不要怕,无论伤痛或苦难。不要怕......                                      ......
  • 上周热点回顾(8.21-8.27)
    热点随笔:· 园子的脱困努力-云厂商合作:领取阿里云免费ECS试用资源,部署JavaWeb环境,送小礼品 (博客园团队)· 程序员的这10个坏习惯,你中了几个?超过一半要小心了 (程序员济癫)· 20款VSCode实用插件推荐 (追逐时光者)· WPF实现ElementUI风格的日期时间选择器 (czwy)· ......
  • 鼠标任意拖动元素排列顺序(vue)
    参考地址:https://codesandbox.io/s/condescending-butterfly-enjqpr?file=/src/App.vue <template><div><transition-groupname="drag"class="list"tag="ul"><li@dragstart="dragStart(......
  • Leetcode2788——按分隔符拆分字符串
    给你一个字符串数组 words 和一个字符 separator ,请你按 separator 拆分 words 中的每个字符串。返回一个由拆分后的新字符串组成的字符串数组,不包括空字符串 。注意separator 用于决定拆分发生的位置,但它不包含在结果字符串中。拆分可能形成两个以上的字符串。结......