刪除數組中的重復元素,並返回去重的數組之Python解法


題目:給定一個排序數組,你需要在 原地 刪除重復出現的元素,使得每個元素只出現一次,返回移除后數組的新長度。不要使用額外的數組空間,你必須在 原地 修改輸入數組 並在使用 O(1) 額外空間的條件下完成。
解法:采用雙指針,遍歷數組,發現兩個值相等,移動指針,發現兩個值不相等,互換位置保證指針走過的地方都是不重復的數

def handler(li):
    """雙指針方法"""
    if not li or len(li) == 0:
        return 0
    i = 0
    res = [li[0]]
    for j in range(1, len(li)):
        if li[i] != li[j]:
            i += 1
            li[i] = li[j]
            res.append(li[i])
    return i+1,res


def handler_01(li):
    """元素彈出法"""
    if not li or len(li) == 0:
        return 0
    i = 0
    j = 1
    while j <= len(li) -1:
        if li[i] == li[j]:
            li.pop(j)
        else:
            i += 1
            j += 1
    return len(li)


if __name__ == '__main__':
    print('刪除重復后列表長度及列表內容', handler([1,2,3,3,4,5]))
    print('刪除重復后列表長度', handler_01([1,2,3,3,4,5]))

結果展示:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM