我正在尝试从整数数组中删除值的每个实例,并返回新整数数组的长度。输入为[3,2,2,3],val为3。输出应该是[2,2],长度为2。我一直在获取[3,2],但是我正在通过数组删除val。
$data | Group-Object -Property ComputerName,MaAddress | ForEach-Object{$_.Group | Sort-Object -Property FirstSeenDate | Select-Object -First 1}
答案 0 :(得分:3)
当删除前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();
}
}
答案 1 :(得分:0)
您没有显示任何打印代码,但我假设您根据此方法返回的编号打印nums
。这意味着您绝不会以任何方式更改nums
,而仅从那里打印前n个数字。您需要返回修改后的数组,而不仅仅是返回长度。
答案 2 :(得分:0)
您根本不需要调用remove(虽然像您一样进行删除,也可以,但是例如,如果您在一个foreach周期中执行此操作,它将在ConcurrentModificationException
上崩溃。相反,您可以确定是否在第一个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();
(我知道这不能直接回答您的问题)