題目:給定一個排序數組,你需要在 原地 刪除重復出現的元素,使得每個元素只出現一次,返回移除后數組的新長度。不要使用額外的數組空間,你必須在 原地 修改輸入數組 並在使用 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]))
結果展示: