leetcode 27. 移除元素【数组】【Easy】

题目:

给定一个数组 nums 和一个值 val,你需要原地移除所有数值等于 val 的元素,返回移除后数组的新长度。

不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。

元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。

示例 1:

给定 nums = [3,2,2,3], val = 3,

函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。

你不需要考虑数组中超出新长度后面的元素。

示例 2:

给定 nums = [0,1,2,2,3,0,4,2], val = 2,

函数应该返回新的长度 5,并且nums中的前五个元素为0,1,3,0,4。

注意:

这五个元素可为任意顺序。

你不需要考虑数组中超出新长度后面的元素。

说明:

为什么返回数值是整数,但输出的答案是数组呢?

请注意,输入数组是以“引用”方式传递的,这意味着在函数里修改输入数组对于调用者是可见的。

你可以想象内部操作如下:

// nums 是以“引用”方式传递的。也就是说,不对实参作任何拷贝
int len = removeElement(nums, val);

// 在函数里修改输入数组对于调用者是可见的。
// 根据你的函数返回的长度, 它会打印出数组中该长度范围内的所有元素。
for (int i = 0; i < len; i++) {
    print(nums[i]);
}

思路一:

        有两个指针 i 和 j ,分别指向数组的首尾。当 i < j 时,判断 i 是否等于val。若 nums[i]!=val,则将 i 后移,指向nums中的下一位元素;当 nums[i]==val时,就用nums数组后面不等于val值的元素替换掉nums[i]。nums数组中不等于val的数值要从最后一个数开始判断,依次向前。直到 i 的值大于或等于 j 为止。如果 i == j,那么就要判断当前这个nums值是不是等于val。如果等于就要在原来基础上加1,若不等于就不用加,直接返回之前的 i 值即可。

代码一:

class Solution:
    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        i = 0
        j = len(nums)-1
        while i<j:
            if nums[i]!=val:
                i += 1
            else:
                if nums[j]==val:
                    j -= 1
                else:
                    temp = nums[i]
                    nums[i] = nums[j]
                    nums[j] = temp
        if i==j:
            if nums[i]==val:
                return i
            else:
                return i+1

思路二:

        上一个思路是自己想的,这个方法是提交了之后再网上搜到的大神的解法。大神的思路:定义两个变量 i 和 j ,两个变量都初始化为0。以 i 为索引开始遍历整个数组,当数组元素的值不等于val时,把nums[i]的值赋给nums[j]。最后返回 j 即可。整个方法比思路一的方法简洁很多。

代码二:

class Solution:
    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        i = 0
        j = 0
        while i < len(nums):           
            if nums[i] != val:
                nums[j] = nums[i]
                j += 1
            i+=1
        return j

猜你喜欢

转载自blog.csdn.net/weixin_40449071/article/details/83064023