2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

[100%] PermMissingElem (codility lessons)

Last updated at Posted at 2020-12-19

Painless

PermMissingElem

指定された順列で欠落している要素を見つけます。
image.png

タスク説明

N個の異なる整数で構成される配列Aが与えられます。 配列には[1 ..(N + 1)]の範囲の整数が含まれています。これは、1つの要素が欠落していることを意味します。

あなたの目標は、その欠けている要素を見つけることです。

関数を書く:

class solution {public int solution(int [] A); }

配列Aが与えられると、欠落している要素の値を返します。

たとえば、次のような配列Aが与えられます。

   A [0] = 2
   A [1] = 3
   A [2] = 1
   A [3] = 5

欠落している要素であるため、関数は4を返す必要があります。

次の仮定のための効率的なアルゴリズムを記述します。

  • Nは[0..100,000]の範囲内の整数です。
  • Aの要素はすべて別個のものです。
  • 配列Aの各要素は、[1 ..(N + 1)]の範囲内の整数です。

解く

Program【案1:Arrays.sort】

PermMissingElemSolutionSort.java

PermMissingElemSolutionSort.java
    public int solution(int[] A) {
        if (A.length == 0) return 1;

        java.util.Arrays.sort(A);
        for (int i = 0; i < A.length; i++) {
            if ((i + 1) != A[i]) return i + 1;
        }
        return A.length + 1;
    }

Detected time complexity:
O(N) or O(N * log(N))

jUnit

PermMissingElemSolutionSortTest.java


Program【案2: data bucket】

PermMissingElemSolutionBucket.java

PermMissingElemSolutionBucket.java
    public int solution(int[] A) {
        boolean[] bucket = new boolean[100000 + 2];
        java.util.Arrays.fill(bucket, false);
        for (int anA : A) {
            bucket[anA] = true;
        }
        for (int i = 1; i < bucket.length; i++) {
            if (!bucket[i]) {
                return i;
            }
        }

        return 1;
    }

Detected time complexity:
O(N) or O(N * log(N))

jUnit

PermMissingElemSolutionBucketTest.java


See also: CodilityのLessonsをすべて解く(更新中)

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?