LeetCode 解答 #26. Remove Duplicates from Sorted Array プログラミング練習
問題:
難易度: 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を一つ前に進ませ、
リストの重複部分を取り除く作業をしています。
今日は以上。
よいプログラミング生活を!