給定一個排序數組,你須要在 原地 刪除重複出現的元素,使得每一個元素只出現一次,返回移除後數組的新長度。不要使用額外的數組空間,你必須在 原地 修改輸入數組 並在使用 O(1) 額外空間的條件下完成。數組
示例 1:微信
給定數組 nums = [1,1,2], 函數應該返回新的長度 2, 而且原數組 nums 的前兩個元素被修改成 1, 2。 你不須要考慮數組中超出新長度後面的元素。
示例 2:函數
給定 nums = [0,0,1,1,1,2,2,3,3,4], 函數應該返回新的長度 5, 而且原數組 nums 的前五個元素被修改成 0, 1, 2, 3, 4。 你不須要考慮數組中超出新長度後面的元素。
問題信息
-
輸入:已排好序的數組spa
-
輸出:去重後新數組的長度.net
-
額外條件:不建立額外空間直接修改原數組去重,不考慮新數組長度以後的元素指針
思考
很顯然須要遍歷掃描重複項,在元素不一樣的時候設置值。那麼須要兩個指針比較,一個指針i的功能是用來存去重的值,所以第二個指針j掃面所有與i判斷是否重複若不重複則i指針要移動並存下該值。code
/* 給定 nums = [0,0,1,1,1,2,2,3,3,4], 第一位是直接不變,從第二位纔開始須要判斷 */ nums[1] == nums[0] 相等 nums[2] == nums[0] 不相等 存下第二位 num[1] = nums[2] nums[3] == nums[1] 相等 nums[4] == nums[1] 相等 nums[5] == nums[1] 不相等 存下第三位 nums[2] = nums[5] nums[6] == nums[2] 相等 ......
總結代碼排序
int i = 0; for(int j = 1; j < nums.length; j++){ if(nums[j] != nums[i]){ i++; nums[i] = nums[j]; } } return i+1
數組長度是固定的因此設置不重複的值後後面的之前的值仍是存在的,按照題意不去建立新數組只要獲得新數組的大小便可,也就是nums[0]到nums[i]就是能夠取走作新數組,按照例子去重後原數組nums = [0,1,2,3,4,2,2,3,3,4]。原數組的前i+1位便是新數組元素,長度即i+1get
本文分享自微信公衆號 - IT那個小筆記(qq1839646816)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。class