LeetCode 解答 #27. Remove Element プログラミング練習

問題:
f:id:stlisacity:20180530161052p:plain
難易度: easy
入力: integerのリストと整数val
目的: リストの中でvalと同じ値の数値を取り除き新しいリストの長さを返せ
出力: integer

前回の♯26と殆ど同じな問題です。
関数では整数を返すようになっていますが、
裏側では下の様なコードを走らせ、
エレメントの確認をしているのでリストの内容も変えないとテストケースは通りません。

int len = removeElement(nums, val);
for (int i = 0; i < len; i++) {
print(nums[i]);
}

/*
例えば入力が[1,1,2], 2の場合、目標数値2を取り除き、リストは[1,1]でなくてはならない。
但し長さ2以外の部分は処理しないでよい。([1,1,1]等でもよい。)

/

注意すべき事: 

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

以下回答です。

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

余分なスペースを使ってはいけない為新しいリストに書き直す事はできません。
for文ですべてのエレメントをターゲットの値と比較させます。
比較し値が同じだった場合はそのままcontinueし、
違う値だった場合前のエレメントを指すjを一つ前に進ませ、
リストの重複部分を取り除く作業をしています。

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