27. 移除元素 Remove Element
https://leetcode-cn.com/problems/remove-element/
给定一个数组nums和一个数值val,将数组中所有等于val的元素删除,并返回剩余的元素个数。
-如何定义删除?从数组中去除?还是放在数组末尾?
-剩余元素的排列是否要保证原有的相对顺序?
-是否有空间复杂度的要求?O(1)
解决方法类似 283. 移动零 MoveZeros
//时间复杂度O(n)
//空间复杂度O(1)
public int removeElement(int[] nums, int val) {
int noValIndex=0;
//遍历到第i个元素,保证[0..i]中的所有非val 元素
// 都顺序的排列在[0..noValIndex)后
//同时保证[noValIndex,i)均是val 元素
for(int i=0;i<nums.length;i++){
if(nums[i]==val){
continue;
}
//每个元素都不相等 就不用切换
if(noValIndex!=i){
swap(nums,i,noValIndex);
}
noValIndex++;
}
return noValIndex;
}
private void swap(int[] nums,int source,int target){
int temp=nums[source];
nums[source]=nums[target];
nums[target]=temp;
}