3 回答
TA贡献1851条经验 获得超5个赞
当您删除前 3 个时,您将拥有 i=0,接下来数组列表将调整大小,因此当您删除时,您需要执行 i - -。
class Solution {
public int removeElement(int[] nums, int val) {
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < nums.length; i++) {
list.add(nums[i]);
}
if(list.isEmpty()) {
return 0;
}
for(int i = 0; i < list.size(); i++) {
if(list.get(i) == val) {
list.remove(i);
i--;
}
}
return list.size();
}
}
TA贡献1812条经验 获得超5个赞
您根本不需要调用 remove(像您一样删除时,没关系,但是例如,如果您在 foreach 循环中执行此操作,它会在 . 上崩溃ConcurrentModificationException。相反,您可以确定是否将 item 添加到结果中列出或不在第一个for循环内(我认为这更安全):
ArrayList<Integer> list = new ArrayList<Integer>();
for(int i = 0; i < nums.length; i++) {
if (nums[i] != val) {
list.add(nums[i]);
}
}
return list.size();
(我知道这不能直接回答你的问题)
TA贡献1804条经验 获得超7个赞
您没有显示任何打印代码,但我假设您nums
根据此方法返回的数字进行打印。这意味着您永远不会nums
以任何方式进行更改,只需从那里打印前 n 个数字。您需要返回修改后的数组,而不仅仅是长度。
添加回答
举报