題目地址:
[https://www.lintcode.com/problem/remove-duplicates-from-sorted-array/description]
給定一個排序好的數組,要求in-place去重,返回去重後數組的長度。
可以用快慢雙指針。先令慢指針,區間表示已經去重的區間。快指針用於遍歷數組。當或者指向的數不等於指向的數時,就把指向的數加入去重的區間,同時拓展去重後的區間的右邊界。最後返回即可。代碼如下:
public class Solutiont {
/*
* @param nums: An ineger array
* @return: An integer
*/
public int removeDuplicates(int[] nums) {
// write your code here
if (nums == null || nums.length == 0) {
return 0;
}
int i = -1;
for (int j = 0; j < nums.length; j++) {
if (j == 0 || nums[j] != nums[i]) {
nums[++i] = nums[j];
}
}
return i + 1;
}
}
時間複雜度,空間。