解法1:时间换空间
题目要求空间复杂度在o(1),那就是时间换空间
思路:找到一个匹配值删除掉后,直接把后面的全挪到前面去,时间复杂度就是O(n方)
c代码
int removeElement(int* nums, int numsSize, int val) {
// 边界问题
if(numsSize == 0) return 0;
int i, j, k=numsSize, h; //k用来存储删除元素后nums的长度
i = 0;
while(1){
if(nums[i] == val){
// 删除匹配到的元素
// 整体前移来达到删除元素的效果
for(j = i; j < k - 1; j ++){
nums[j] = nums[j+1];
}
k --; //整体的数组长度再减1
// 由于后面的元素全部前移了,所以i相当于在原地不动
} else {
i ++;
}
if(i == k) break;
}
return k;
}
go代码
func removeElement(nums []int, val int) int {
p := 0
for _, v := range nums{
if v != val{
nums[p] = v
p ++
}
}
return p
}
Java代码