第一次错误代码:
public int removeElement(int[] nums, int val) {
int len=nums.length;
int i,j=len-1;
for(i=0;i<len;i++){
if(nums[i]==val){
nums[i]=nums[j];
nums[j--]=-1;
}
}
for(i=0;i<len;i++){
if(nums[i]==-1){
break;
}
}
return i;
}
测试用例中第一个等于val的值没有删除,定位到 nums[i]=nums[j],在换值之后应该重复本次i值得循环,因为nums[i]的值换后已经变为了nums[j]也就是数组末尾的值,需要再次对nums[i]判断;
通过代码:
public int removeElement(int[] nums, int val) {
int len=nums.length;
int i,j=len-1;
for(i=0;i<len;i++){
if(nums[i]==val){
nums[i--]=nums[j];
nums[j--]=-1;
}
}
for(i=0;i<len;i++){
if(nums[i]==-1){
break;
}
}
return i;
}
题目链接[:](27. 移除元素 - 力扣(LeetCode))