题目描述:点此处
解法①:
直接覆盖原有数组
主要思路,遍历整个数组nums,取出数字变量num,同时设置下标ans
如果num!=val,则将nums[ans]=num
如果num=val,则跳过,最后ans即为数组最终长度。
其实是和双指针解法类似
class Solution {
public int removeElement(int[] nums, int val) {
int ans = 0;
for(int num: nums){
if(num != val){
nums[ans]=num;
ans++;
}
}
return ans;
}
}
解法②:
交换移出
遍历整个数组,遍历指针为i,数组长度为ans
如果出现的nums[i]!=val时,则i++,ans不变
如果nums[i]=val时,则ans–,并且nums[i]=nums[ans-1](即将当前数字和最后一个数字进行交换,抛出最后一个数字即为ans–)
最后ans即为数组长度
class Solution {
public int removeElement(int[] nums, int val) {
int ans = nums.length;
for(int i = 0;i<ans;){
if(nums[i]==val){
nums[i]=nums[ans-1];
ans--;
}else{
i++;
}
}
return ans;
}
}