首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

LeetCode Remove Duplicates from Sorted Array:雙指針原地去重

     編輯:關於C++

問題描述

給定已排序數組,原地移除重複元素,使每個元素只出現一次,返回新長度。要求 O(1) 額外空間。

解題思路

雙指針:`slow` 指向當前不重複部分的末尾,`fast` 掃描數組。當 `nums[fast] != nums[slow]` 時,`++slow; nums[slow] = nums[fast]`。最後新長度 = `slow + 1`。

代碼實現 (C++)

class Solution {
public:
    int removeDuplicates(vector& nums) {
        if (nums.empty()) return 0;
        int slow = 0;
        for (int fast = 1; fast < nums.size(); ++fast) {
            if (nums[fast] != nums[slow]) {
                nums[++slow] = nums[fast];
            }
        }
        return slow + 1;
    }
};

複雜度分析

  • 時間複雜度:O(n)。
  • 空間複雜度:O(1)。

總結

有序數組去重經典雙指針模板,`slow` 維護不重複區間邊界,`fast` 探索新元素。同類問題:移除指定值、移動零等。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved