算法题:27移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。
不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。
元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/remove-element
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
import java.util.Arrays;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
class Solution {
    public static int removeElement(int[] nums, int val) {
        nums = Arrays.stream(nums)
                .filter((x) -> x != val)
                .toArray();
        
        return nums.length;
    }
    public static void main(String[] args) {
        int[] ints = new int[]{3, 2, 2, 3};
        int ans = removeElement(ints, 3);
        System.out.println("ans = " + ans);
        Arrays.stream(ints).forEach((x)-> System.out.print(x));
    }
}
本想着刚学了一下Java8新特性,想用一下的,可做出来后发现存在问题,这个stream流操作后赋值之后,为什么不能根据地址吧num数组的内容改变呢。
===========================
想了很久,遍历一遍符合就放到前面,第二种解法就是遍历一遍,遇到相同就往后面移动,后面覆盖前面。写的时候不知道哪里出问题了,先姑且就用这种方式吧。
import java.util.Arrays;
class Solution {
    public static int removeElement(int[] nums, int val) {
        int k = 0;
        for (int i = 0; i < nums.length; i++) {
            if (nums[i] != val) {
                nums[k] = nums[i];
                k++;
            }
        }
        return k;
    }
 
}
刚刚看别人的题解,原来我这个叫:双指针法,,,花里胡哨。