給定一個排序數組,你須要在原地刪除重複出現的元素,使得每一個元素只出現一次,返回移除後數組的新長度。java
不要使用額外的數組空間,你必須在原地修改輸入數組並在使用 O(1) 額外空間的條件下完成。python
Given a sorted array nums, remove the duplicates in-place such that each element appear only once and return the new length.數組
Do not allocate extra space for another array, you must do this by modifying the input array in-place with O(1) extra memory.bash
示例 1:app
給定數組 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。
你不須要考慮數組中超出新長度後面的元素。
複製代碼
說明:ui
爲何返回數值是整數,但輸出的答案是數組呢?this
請注意,輸入數組是以**「引用」**方式傳遞的,這意味着在函數裏修改輸入數組對於調用者是可見的。spa
你能夠想象內部操做以下:指針
// nums 是以「引用」方式傳遞的。也就是說,不對實參作任何拷貝
int len = removeDuplicates(nums);
// 在函數裏修改輸入數組對於調用者是可見的。
// 根據你的函數返回的長度, 它會打印出數組中該長度範圍內的全部元素。
for (int i = 0; i < len; i++) {
print(nums[i]);
}
複製代碼
定義兩個指針,指針 i 索引遍歷數組,指針 j 索引值與 i 索引值比較,若是相等則 i 繼續遍歷,若是不等則將索引 i 的值賦值獲得索引 j+1 的值。
class Solution {
public int removeDuplicates(int[] nums) {
int numsLen = nums.length;
if (numsLen < 1) return numsLen;//若是數組只有一個值或空數組,直接返回該數組的長度
int j = 0;
for (int i = 1; i < numsLen; i++) {//指針 i 從從索引 1 開始遍歷數組
if (nums[i] != nums[j]) {//與索引 j 的值比較
nums[++j] = nums[i];//若是不相等 索引j+1 ,並獲得索引i的值
}
}
return j + 1;//返回到指針 j,數組的長度
}
}
複製代碼
python這道題並無很特殊的解法。
class Solution:
def removeDuplicates(self, nums: List[int]) -> int:
numsLen = len(nums)
if(numsLen < 1):
return numsLen
j = 0
for i in range(1, numsLen):
if nums[j] != nums[i]:
j += 1
nums[j] = nums[i]
return j+1
複製代碼
公衆號:愛寫bug(ID:iCodeBugs)