zoukankan      html  css  js  c++  java
  • 【LeetCode】27. 移除元素

    题目链接:27. 移除元素
    题目描述:
    给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。
    不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。
    元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
    示例 1:

    给定 nums = [3,2,2,3]val = 3,
    函数应该返回新的长度 2,并且 nums 中的前两个元素均为 2。
    你不需要考虑数组中超出新长度后面的元素。

    示例 2:

    给定 nums = [0,1,2,2,3,0,4,2]val = 2
    函数应该返回新的长度 5,并且 nums 中的前五个元素为0, 1, 3, 0, 4。
    注意这五个元素可为任意顺序。
    你不需要考虑数组中超出新长度后面的元素。

    说明:
    为什么返回数值是整数,但输出的答案是数组呢?
    请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。
    你可以想象内部操作如下:

    // nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
    int len = removeElement(nums, val);
    
    // 在函数里修改输入数组对于调用者是可见的。
    // 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
    for (int i = 0; i < len; i++) {
        print(nums[i]);
    }
    

    方法一:快慢指针
    用两个指针:慢指针i和快指针j,遍历数组。
    nums[j]与给定值相等时,快指针j跳过该元素,慢指针i不动;
    nums[j]与给定值不相等时,复制nums[j]nums[i],两个指针同时递增。
    如此重复直到快指针j到达数组尾,慢指针i的值就是结果数组的长度。

    class Solution {
        public int removeElement(int[] nums, int val) {
            int i = 0;
            for (int j = 0; j < nums.length; j ++) {
                if (nums[j] != val) {
                    nums[i] = nums[j];
                    i ++;
                }
            }
            return i;
        }
    }
    

    方法二:
    遍历数组,当访问元素等于给定值时,将数组最后一个元素覆盖当前元素,并将数组大小 -1。值得注意的是,数组最后一个元素可能是题目给定值,但是并不影响,在下一次循环中,仍然会检查这个元素。

    class Solution {
        public int removeElement(int[] nums, int val) {
            int i = 0;
            int n = nums.length;
            while (i < n) {
                if (nums[i] == val) {
                    nums[i] = nums[n - 1];
                    n --;
                } else {
                    i ++;
                }
            }
            return n;
        }
    }
    
  • 相关阅读:
    常见寻找OEP脱壳的方法
    Windows内核原理系列01
    HDU 1025 Constructing Roads In JGShining's Kingdom
    HDU 1024 Max Sum Plus Plus
    HDU 1003 Max Sum
    HDU 1019 Least Common Multiple
    HDU 1018 Big Number
    HDU 1014 Uniform Generator
    HDU 1012 u Calculate e
    HDU 1005 Number Sequence
  • 原文地址:https://www.cnblogs.com/ME-WE/p/12433574.html
Copyright © 2011-2022 走看看