【求知=>算法】刪除排序數(shù)組中的重復項

刪除排序數(shù)組中的重復項
給你一個有序數(shù)組?nums
?,請你?原地
?刪除重復出現(xiàn)的元素,使每個元素 只出現(xiàn)一次?,返回刪除后數(shù)組的新長度。 不要使用額外的數(shù)組空間,你必須在?原地
?修改輸入數(shù)組?并在使用 O(1) 額外空間的條件下完成。
說明:
為什么返回數(shù)值是整數(shù),但輸出的答案是數(shù)組呢? 請注意,輸入數(shù)組是以「引用」方式傳遞的,這意味著在函數(shù)里修改輸入數(shù)組對于調(diào)用者是可見的。
你可以想象內(nèi)部操作如下:
示例 1:
輸入:
nums?=?[1,1,2]
輸出:
2,?nums?=?[1,2]
解釋:
函數(shù)應該返回新的長度?2?,并且原數(shù)組?nums?的前兩個元素被修改為?1,?2?。不需要考慮數(shù)組中超出新長度后面的元素。
示例 2:
輸入:
nums?=?[0,0,1,1,1,2,2,3,3,4]
輸出:
5,?nums?=?[0,1,2,3,4]
解釋:
函數(shù)應該返回新的長度?5?,?并且原數(shù)組?nums?的前五個元素被修改為?0,?1,?2,?3,?4?。不需要考慮數(shù)組中超出新長度后面的元素。
???提示:
0?<=?nums.length?<=?3?*?104
-104?<=?nums[i]?<=?104
nums?已按升序排列
解題思路
雙指針思路: 設置兩個值,分別代表兩個指針 一個左指針,一個右指針?

使用right指針遍歷整個數(shù)組
如果right對應的值比左指針的大,則left +1 ,且把右指針的值賦予當前左指針所指,right++
如果右指針和左指針相同,則不做操作,right++
最后返回左指針+1,因為都是從0 開始的。

交換數(shù)組的思路:
定義一個空的數(shù)組
循環(huán)便利數(shù)組、判斷循環(huán)的子集不再新的數(shù)組中,將新的子集添加到新的數(shù)組中,反正pass,然后返回新的數(shù)組
擴展解題:
Set函數(shù)思路:
創(chuàng)建一個無序不重復元素集,可進行關系測試,刪除重復數(shù)據(jù)
統(tǒng)計字符串出現(xiàn)的次數(shù),刪除重復的思路:
定義新的數(shù)組
循環(huán)數(shù)組
統(tǒng)計字符串里某個字符串出現(xiàn)的次數(shù)
設定刪除的次數(shù),比出現(xiàn)的總次數(shù)少一個
比如出現(xiàn)3次,循環(huán)刪除times-1次的i,返回數(shù)組