lintcode 刪除排序陣列中的重複數字
阿新 • • 發佈:2018-11-22
lintcode 刪除排序陣列中的重複數字
描述
給定一個排序陣列,在原陣列中刪除重複出現的數字,使得每個元素只出現一次,並且返回新的陣列的長度。
不要使用額外的陣列空間,必須在原地沒有額外空間的條件下完成。
樣例
給出陣列A =[1,1,2],你的函式應該返回長度2,此時A=[1,2]。
思路
先說我的思路,刪除重複的元素即可,使用vector的迭代器iterator
class Solution { public: /* * @param nums: An ineger array * @return: An integer */ int removeDuplicates(vector<int> &nums) { // write your code here if (nums.size() == 0) return 0; for (vector<int>::iterator it = nums.begin(); it != nums.end()-1; ) { if (*it == *(it+1)) it = nums.erase(it); else ++it; } return nums.size(); } };
這個演算法很簡單,我看了一下網上其他的想法,是使用了另外的一個指標來把不同的元素從0開始賦值,返回這個指標的長度。因為題目沒有要求後來的陣列要怎麼樣,這個思路很棒,值得學習。
class Solution { public: /* * @param nums: An ineger array * @return: An integer */ int removeDuplicates(vector<int> &nums) { // write your code here if (nums.size() <= 1) return nums.size(); int index = 0; for (int i = 1; i < nums.size(); i++) { if (nums[i] != nums[index]) nums[++index] = nums[i]; } return index+1; } };