[leetcode] 27. Remove Element

  • 题目链接:https://leetcode.com/problems/remove-element/solution/
  • 题目概述:这道题让我们在一个数组里删除指定的元素,并返回删除元素后的数组长度n,并且数组前n个长度不包含指定删除的元素
  • 题目要求:
  1. 原地操作
  2. 不分配额外空间
  3. 不关心返回的数组元素顺序
  • 解法
class Solution(object):
    def removeElement(self, nums, val):
        """
        :type nums: List[int]
        :type val: int
        :rtype: int
        """
        n = len(nums)
        if n == 1 and nums[0] == val:
            return 0
        p = n-1
        q = p+1
        while p >= 0 and q >= 0:
            while p >= 0 and nums[p] == val:
                p -= 1
            q = p - 1 if q >= p else q - 1
            while q >= 0 and nums[q] != val:
                q -= 1
            if q >= 0:
                nums[p] ^= nums[q]
                nums[q] ^= nums[p]
                nums[p] ^= nums[q]
        return p+1

描述:使用双指针法,因为最后要返回数组长度,所以思路是将后面的非指定元素交换到前面指定元素的位置

  1. p从尾部向头部移动,遇到指定元素即停止
  2. q从p前面开始向头部移动,遇到非指定元素即停止
  3. 原地交换p、q指向的元素

你可能感兴趣的:([leetcode] 27. Remove Element)