面试经典150题-2-移除元素-力扣27

111 阅读1分钟

移除元素-力扣27 image.png

解法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代码