算法题: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;
}
}
刚刚看别人的题解,原来我这个叫:双指针法,,,花里胡哨。