[leetcode] 27. Remove Element

  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指向的元素
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。