給定一個數組 nums 和一個值 val,你需要原地移除所有數值等於 val 的元素,返回移除後數組的新長度。
不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。
元素的順序可以改變。你不需要考慮數組中超出新長度後面的元素。
示例 1:
給定 nums = [3,2,2,3], val = 3, 函數應該返回新的長度 2, 並且 nums 中的前兩個元素均爲 2。 你不需要考慮數組中超出新長度後面的元素。
考慮使用迭代器 迭代遍歷列表,列表去除數據。
PS:需要注意加黑部分,一個循環中不能出現兩次it.next(),會發生java.util.NoSuchElementException訪問衝突錯誤。
例如: while(it.hasNext())
{
int x = it.next();
if(x==val)
it.remove();
else{
nums[j]=it.next();
j++;
}
}
是錯誤的。
class Solution {
public int removeElement(int[] nums, int val) {
List<Integer> list=new ArrayList<Integer>();
for(int i=0;i<nums.length;i++)
list.add(nums[i]);
int j=0;
Iterator<Integer> it=list.iterator();
while(it.hasNext())
{
int x = it.next();
if(x==val)
it.remove();
else{
nums[j]=x;
j++;
}
}
return list.size();
}
}