Remove Duplicates from Sorted Array

LeedCode算法第三天:

本次的算法便是將一個有序數組中的重複元素去掉,並將去掉重複元素的數組的長度返回。

本人一開始考慮的是將整個數組進行循環,並進行一一比較,重複兩個的話則長度減一,但這樣的做法並不健全。

重新考慮後,得到以下算法。


算法①:

此算法使用兩個快慢指針,首先二者均指向第一個元素。然後進行移動。移動原則如下:兩個指針若指向的數值相同,則快指針向後移動,慢指針不動,若不同,

二者都移動。當快指針移動到最後一位時,慢指針的下標加一,便是新數組的長度。

public class Solution
{
    public int removeDuplicates(int[] nums) 
    {
        int len=nums.length;
        int p=0;
        int q=0;
            
        if(len<=1)
        {
            return len;
        }
        while(q<len)
        {
            if(nums[p]==nums[q])
            {   
            q++;
            }
            else
            {
            p++;
            nums[p]=nums[q];//快指針的值對重複的值進行覆蓋
            q++;
            
                
            }
            
           
            
            
        }
        
              return p+1;
            
      
        
    }
}

但是看了一下大神的博客,才知道人家的很強,自己的屬實low逼。

其實在原理上,均是使用的快慢指針的思想,但是以下算法更加精簡。如果不相等,那麼直接後移。

如果相等則只移動快指針。(因爲是有序的,第一個比完以後便不必考慮,其他的也如此)。

public class Solution {
    public int removeDuplicates(int[] nums) {
        if (nums == null || nums.length == 0) {
             return 0;
        }
        int last = 0;
        for (int i = 1; i < nums.length; i++) {
            if (nums[i] != nums[last]) {
                nums[++last] = nums[i];
            }
        }
        return last + 1;
    }
}







發佈了24 篇原創文章 · 獲贊 22 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章