LeetCode27. 移除元素
作者:互联网
题目要求
给一个数组nums
和一个值val
你需要原地移除所有值为val
的元素,并返回移除后数组的新长度。
不能使用额外的数组空间,你必须使用O(1)
的空间复杂度完成对输入数组的修改。
其中元素的顺序可以改变,你不需考虑数组中超出新长度后面的元素。
示例1:
输入:nums = [3, 2, 2, 3], val = 3
输出:2, nums = [2, 2]
示例2:
输入: nums = [0, 1, 2, 2, 3, 0, 4, 2], val =2
输出:5, nums = [0, 1, 4, 0, 3]
只要数组新长度中的所有元素为最终答案即可,无需考虑新数组中元素的顺序性。
Java AC代码
时间复杂度:O(n),空间复杂度:O(1)。拷贝覆盖的思路进行。
class Solution
{
public int removeElement(int[] nums, int val)
{
if (nums == null || nums.length == 0) return 0;
int k = 0;
for (int i = 0; i < nums.length; ++i)
{
if (nums[i] == val)
{
k++; // 如果值相等,计数器k+1
} else
{
// 值不想等,向前拷贝覆盖。
nums[i - k] = nums[i];
}
}
return nums.length - k;
}
}
标签:val,nums,int,元素,数组,移除,LeetCode27 来源: https://www.cnblogs.com/Huobn/p/14462914.html