給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o(1) 額外空間的條件下完成。
示例 :
給定 nums = [0,0,1,1,1,2,2,3,3,4],
函式應該返回新的長度 5, 並且原陣列 nums 的前五個元素被修改為 0,1,2,3,4。
你不需要考慮陣列中超出新長度後面的元素。
題目中要求的是在原地刪除重複出現的陣列,要求使用 o(1) 額外空間,而且還預設了陣列是先經過了排序的 o(1) 額外空間,可以考慮使用乙個arraylist陣列將每次只出現一次的元素收集,然後再遍歷一次arraylist輸出,同樣也是需要從陣列的最左邊開始進行用i作為標記,每次比較j=i+1上的位置的元素和i上的元素是否相等(前提保證陣列不會溢位),只要i和j兩處的值相同就繼續移動j,直到遍歷完陣列。
class solution
//建立乙個arraylist接收陣列中非重複的元素
arraylistlist =new arraylist<>();
//當出現了 輸入陣列的長度為0或者輸入陣列為null的情況
if(nums==null||nums.length==0)else if (nums.length==1)else else
//此時
list.add(nums[i]);
i=j;}}
}for(int k=0;k不過這種通過的執行時間比較長
leetcode上提供的雙指標法,因為陣列已經是有序的,我們需要使用兩個指標分別為i和j,
其中i為慢指標,j為快指標。其中i指標從0開始,j指標則從1開始,開始比較nums[i]和nums[j]的值
當nums[i]和nums[j]的值不等的時候,就先將i右移一位i++,再將j位置的值賦值給i,保證了i每次走過的都是非重複的數值
直到最終陣列遍歷完的時候,返回i+1,因為i是陣列下標從0開始的,陣列長度為下標+1
這種方法的時間複雜度就是0(n),遍歷一次陣列n的長度,i和j最多遍歷n步。空間複雜度為0(1)
class solution
//i指標從陣列起始位置開始
int i=0;
//j指標從i+1的位置開始
LeetCode 陣列 刪除排序陣列中的重複項
給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成。示例 給定 nums 0,0,1,1,1,2,2,3,3,4 函式應該返回新的長度 5,並且原陣列 nu...
Leetcode題解026 刪除排序陣列中的重複項
給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 o 1 額外空間的條件下完成 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為 1...
LeetCode 從排序陣列中刪除重複項
給定乙個有序陣列,你需要原地 刪除其中的重複內容,使每個元素只出現一次,並返回新的長度。不要另外定義乙個陣列,您必須通過用 o 1 額外記憶體原地修改輸入的陣列來做到這一點。示例 給定陣列 nums 1,1,2 你的函式應該返回新長度 2,並且原陣列nums的前兩個元素必須是1和2 不需要理會新的陣...