LeetCode 刪除排序陣列中的重複項

2021-10-18 15:29:20 字數 1360 閱讀 2615

題目:

刪除排序陣列中的重複項

分析:

對這道題,我原本的思路是先將重複元素挑出來,全部移到陣列尾,同時計數,然後縮短陣列長度,對無重複元素的陣列進行一次排序;

這種方式並不是不可行,但對於未知量很多的陣列而言,這個方式複雜度太高,效率很低,實現起來十分複雜,所以我考慮了另一種方法。應該在資料結構的書或者習題中會出現這樣的問題,解決方法是:

首先,判斷陣列長度,這一點不僅有助於在處理特殊陣列時提高演算法效率,而且也是後面設定雙指標迴圈的必要,避免指標越界;

其二,設定雙指標,我這裡用遍歷指標ierg和標記指標itag(昨天看到的「匈牙利命名法」,在變數前加上其資料型別);

其三,移動指標,遍歷指標是隨迴圈依次後移的,也就是始終都在移動;標記指標的作用是標記相同元素區塊的第乙個元素,以便於在找到不同元素時進行交換,標記指標僅在其與遍歷指標所指元素不同時才後移。

其四,交換,將 itag 和 iegr 所指元素交換,前面,當元素相同時,itag不變,ierg後移直到遇到不同元素,也就是將不同的元素換到前面;

最後,確定陣列長度,遍歷結束後,itag 是指向的是最後乙個不同元素,所以 itag位序+1 即為刪除後的陣列長度。

下面看演算法:

/*

for this question, my idea is:

ergodicing all array and move same element to the last;

finally,sort this array.

but in this situation, this solution may too complex to realise.

so, there is another way to conquer this question:

we need two pointer variable to locate element in arrary.

one ergodic array,another locates same element.

each time exchange two pointer pointed element.

finally, ocation of the ergodic pointer will be result of numssize.

*/int

removeduplicates

(int

* nums,

int numssize)

ierg++;}

numssize = itag+1;

}return numssize;

}

LeetCode 陣列 刪除排序陣列中的重複項

給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。示例 給定 nums 0,0,1,1,1,2,2,3,3,4 函式應該返回新的長度 5,並且原陣列 nu...

Leetcode題解026 刪除排序陣列中的重複項

給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1...

LeetCode 從排序陣列中刪除重複項

給定乙個有序陣列,你需要原地 刪除其中的重複內容,使每個元素只出現一次,並返回新的長度。不要另外定義乙個陣列,您必須通過用 o 1 額外記憶體原地修改輸入的陣列來做到這一點。示例 給定陣列 nums 1,1,2 你的函式應該返回新長度 2,並且原陣列nums的前兩個元素必須是1和2 不需要理會新的陣...