[leetcode] 27. Remove Element

  • 題目鏈接:https://leetcode.com/problems/remove-element/solution/
  • 題目概述:這道題讓我們?cè)谝粋€(gè)數(shù)組里刪除指定的元素,并返回刪除元素后的數(shù)組長度n,并且數(shù)組前n個(gè)長度不包含指定刪除的元素
  • 題目要求:
  1. 原地操作
  2. 不分配額外空間
  3. 不關(guān)心返回的數(shù)組元素順序
  • 解法
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

描述:使用雙指針法,因?yàn)樽詈笠祷財(cái)?shù)組長度,所以思路是將后面的非指定元素交換到前面指定元素的位置

  1. p從尾部向頭部移動(dòng),遇到指定元素即停止
  2. q從p前面開始向頭部移動(dòng),遇到非指定元素即停止
  3. 原地交換p、q指向的元素
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容