參考連結:
https://blog.csdn.net/qq_40416052/article/details/82054747
此題不需要考慮長度後面的數字
e.g. [1,1,2]
將數組變成[2,1] , 返回length = 2
思路:
i指針記錄長度, j指針loop through list
用i慢指針記錄不等於的長度
用jj快指針loop through list,
如果nums[i] = nums[j], continue to loop直到不同,
然後當快慢指針值不相等時, 將快指針的值儲存到慢指針的值上
畫圖會更好理解這個算法
最後返回i++ 是因為數組中index 0 佔據了一個數值的原因
偽代碼:
loop through j
如nums[i] != nums[j];
i++
nums[i] = nums[j]
自己代碼:
class Solution {
public int removeDuplicates(int[] nums) {
if (nums.length == 0) return 0;
int i =0;
for (int j=0; j<nums.length; j++){
if (nums[i]!=nums[j]){
i++; //將快指針後移一位
nums[i]=nums[j];
}
}
return i+1;
}
}