26. 刪除排序陣列中的重複項時間複雜度:o(n)給定乙個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。
不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 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。
你不需要考慮陣列中超出新長度後面的元素。
空間複雜度:o(1)
思路:
(1)兩個下標 i,j ,初始時 i 在前,j 在後;
(2)遍歷並比較:
若 nums[i] = nums[j] ,則僅僅 j++;
若 nums[i] != nums[j] ,則同時 i++,j++,兩者同時向後移動
例如:nums = [1,2,3],i = 0 指向1,j = 1 指向2,nums[0] != nums[1],判斷中先 i++,然後for迴圈中 j++,也就是i和j同時向後移動一位:
(3)補0:
最後 j 不滿足 j < j.size(),跳出for迴圈,並且 i 之前(包含i)的元素即為目標陣列,陣列長度為 i + 1。(由於leetcode只檢查前 i 個值,並不檢查 i 之後是否為0,所以這一步可省略)
int removeduplicates(vector& nums)
}return i + 1; // 長度為 i+1
原版(不夠精煉):
int removeduplicates(vector& nums)
// nums[i] == nums[j]的情況 j++ 提出來公共的
}// 以下由於leetcode只檢查前i個值,並不檢查i之後是否為0,所以可以注釋掉
// for (j = i + 1; j < nums.size(); j++)
// return i + 1; // 長度為 i+1
}
LeetCode 26 刪除排序陣列中的重複項
給定乙個排序陣列,你需要在原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為1...
leetcode26 刪除排序陣列中的重複項
給定乙個排序陣列,你需要在原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成 示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度 2,並且原陣列 nums 的前兩個元素被修改為1...
LeetCode 26刪除排序陣列中的重複項
給定乙個排序陣列,你需要在原地刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。不要使用額外的陣列空間,你必須在原地修改輸入陣列並在使用 o 1 額外空間的條件下完成。示例 1 給定陣列 nums 1,1,2 函式應該返回新的長度2,並且原陣列 nums 的前兩個元素被修改為1,2...