LeetCode #27 Remove Element

题目

Remove Element


解题方法

此题也是不允许额外存储空间,根据题意得知最后输出的结果只需要是有效数字的长度,且数组里面前几位包含规定数字即可,考虑采用头尾双指针,从头开始找需要替换的位置,从后开始找需要挪到前面的元素,直到头指针超过尾指针,这时尾指针的位置就是要输出的数组的最后一位,将其加1输出即可。


代码

class Solution:
    def removeElement(self, nums: List[int], val: int) -> int:
        if len(nums) == 1 and nums[0] == val:
            nums.pop(0)
            return 0
        
        p = 0
        q = len(nums) - 1
        
        while p < q:
            while p < len(nums)-1 and nums[p] != val:
                p += 1
            while q >= 0 and nums[q] == val:
                q -= 1
            if p < q:
                nums[p], nums[q] = nums[q], nums[p]
        
        return q + 1
posted @ 2020-10-09 16:12  老鼠司令  阅读(44)  评论(0)    收藏  举报