27.移除元素
力扣题目:27.移除元素
这道题,我首先的思路是对元素进行循环,从下标0开始循环,一直到length-1,然后取出数组的值和val进行比较,当相等的时候,将nums[length-1]赋值给当前数组下标对应的数值,然后将length–,最后返回length,即目前新数组的长度,但是这里的致命错误就是没有考虑nums[length-1]是否等于val,如果不等于val那么需要再次移动,直到不等于后才能赋值。
错误代码:
class Solution {
public int removeElement(int[] nums, int val) {
int i;
int length = nums.length;
// 忘记了for循环应该是先初始化,再条件,然后在迭代i++
for(i = 0; i < length; i++){
if(nums[i] == val){
nums[i] = nums[length - 1];
// 简写length = length - 1 是 写成了length -= length 导致结果为0
length -= 1 ;
}
}
return length;
}
}
修改以上代码
class Solution {
public int removeElement(int[] nums, int val) {
int left = 0;
int rigth = nums.length - 1;
while(left <= rigth){
if(nums[rigth] == val){
rigth--;
continue;
}
if(nums[left] == val){
nums[left] = nums[rigth];
rigth--;
}
left++;
}
return rigth + 1;
}
}
修改后的代码还是不够完美,因为牺牲了空间获取时间。