LeetCode26、27 刪重複元素

KJ_Fighting!發表於2020-11-08

LeetCode26 刪重複元素

給定一個排序陣列,你需要在 原地 刪除重複出現的元素,使得每個元素只出現一次,返回移除後陣列的新長度。

不要使用額外的陣列空間,你必須在 原地 修改輸入陣列 並在使用 O(1) 額外空間的條件下完成。

示例 1:

給定陣列 nums = [1,1,2],

函式應該返回新的長度 2, 並且原陣列 nums 的前兩個元素被修改為 1, 2。

你不需要考慮陣列中超出新長度後面的元素。

思路

考慮用 2 個指標,一個在前記作 p,一個在後記作 q,演算法流程如下:

1.比較 p 和 q 位置的元素是否相等。

如果相等,q 後移 1 位
如果不相等,將 q 位置的元素複製到 p+1 位置上,p 後移一位,q 後移 1 位
重複上述過程,直到 q 等於陣列長度。

返回 p + 1,即為新陣列長度。

class Solution {
    public int removeDuplicates(int[] nums) {
     int p=0,q=1;
      while(q<nums.length){
        if(nums[p]!=nums[q]){
          nums[p+1]=nums[q];
          p++;
        }
        q++;
      }
			return p+1;
    }
}

第27題類似,只用改一個比較的地方

 class Solution {
    public int removeElement(int[] nums, int val) {
        if(nums==null)return 0;
        int p=0,q=0;
        while(q<nums.length){
            if(nums[q]!=val){
                nums[p]=nums[q];
                p++;
            }q++;
        }
        return p;
    }
}

相關文章