並べ替え配列から重複を削除する


この問題はthe Introduction to Data Structures Arrays-101 section leetcodeで.

問題声明
与えられるsorted array nums , そして、各要素が1度だけ1度だけ残らず、新たな長さを返すようにして、重複している.
別の配列に余分なスペースを割り当てないでください.
例1 :
Given nums = [1,1,2],

Your function should return length = 2, with the first two elements of nums being 1 and 2 respectively.
例2 :
Given nums = [0,0,1,1,1,2,2,3,3,4],

Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively.

解決策

つのポインタ
指定された配列はソートされた配列ですので、重複する数字はグループとなります.まず、空の配列のエッジケースを処理できます.それから、我々は頭から要素を繰り返し始めることができます.
番目のポインターはリスト内のすべての要素を通過し、最初のポインターは一意の番号に合わせて移動します.
var removeDuplicates = function(nums) {
   // Handling Edge Case
   if(nums.length === 0 ) return 0
     let p1 = 0
     for(let p2 = 1; p2< nums.length; p2++){
        if(nums[p1] !== nums[p2]){
            p1++;
            nums[p1] = nums[p2]
        }       
     }
    return p1 +1        
}
また、配列の末尾からイテレータを開始することもできます.つのポインタの値が同じ場合、要素を削除します.
var removeDuplicates = function(nums) {
    // Handling Edge Case
    if(nums.length === 0 ) return 0
    for(let i = nums.length-1; i > 0;i--){
        if(nums[i]===nums[i-1]){
            nums.splice(i,1)
        }
    }
    return nums.length
};