LeetCode 解答 #26. Remove Duplicates from Sorted Array プログラミング練習

問題:
f:id:stlisacity:20180529134153p:plain
難易度: medium
入力: integerのリスト
目的: リストの中で重複する数字を取り除き、その長さを返せ
出力: integer

入力されたリストが既にソートされているので
重複している数字はすべて隣接の位置にある事になります。
関数では整数を返すようになっていますが、
裏側では関数で返された数字を基に新しいリストを作りテストケースを走らせています。

/*
例えば入力が[1,1,2]の場合、重複ないリストは[1,2]で、長さは2である。
テストケースはリストがちゃんと長さ2で切り取った時[1,2]になっているかもテストするので、
元のリストの処理もしなければならない。
但し長さ2以外の部分は処理しないでよい。([1,2,2]でよい。)

/

注意すべき事: 

  • Extra SpaceはO(1)に抑える
  • 元のリストも処理する。

以下回答です。

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

for文ですべてのエレメントを一つ前のエレメントと比較させます。
比較し値が同じだった場合はそのままcontinueし、
違う値だった場合前のエレメントを指すjを一つ前に進ませ、
リストの重複部分を取り除く作業をしています。

今日は以上。
よいプログラミング生活を!