Leetcode - ソートされた配列から重複を削除する


**`減少しない順序でソートされた整数配列 nums が与えられた場合、それぞれの一意の要素が 1 回だけ現れるように重複をインプレースで削除します.要素の相対的な順序は同じに保つ必要があります.

一部の言語では配列の長さを変更できないため、代わりに配列 nums の最初の部分に結果を配置する必要があります.より正式には、重複を削除した後に k 個の要素がある場合、nums の最初の k 個の要素が最終結果を保持する必要があります.最初の k 要素を超えて何を残すかは問題ではありません.

nums の最初の k スロットに最終結果を配置した後、k を返します.

別の配列に余分なスペースを割り当てないでください.これを行うには、O(1) の追加メモリを使用して入力配列をインプレースで変更する必要があります.`**

カスタムジャッジ:

審査員は、次のコードを使用してソリューションをテストします.

int[] nums = [...]; // Input array
int[] expectedNums = [...]; // The expected answer with correct length

int k = removeDuplicates(nums); // Calls your implementation

assert k == expectedNums.length;
for (int i = 0; i < k; i++) {
    assert nums[i] == expectedNums[i];
}

If all assertions pass, then your solution will be accepted.
`例 1:

入力: 数値 = [1,1,2]
出力: 2、数値 = [1,2,_]
説明: 関数は、nums の最初の 2 つの要素がそれぞれ 1 と 2 である k = 2 を返す必要があります.
返された k の後に何を残しても問題ありません (したがって、それらはアンダースコアです).
例 2:

入力: 数値 = [0,0,1,1,1,2,2,3,3,4]
出力: 5、数値 = [0,1,2,3,4,,,,_]
説明: 関数は、nums の最初の 5 つの要素がそれぞれ 0、1、2、3、および 4 である k = 5 を返す必要があります.
返された k の後に何を残しても問題ありません (したがって、それらはアンダースコアです).

Java ソリューション -

import java.util.*;

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

    }
}