PermCheck

Check whether array A is a permutation
ℹ️ © Codility, 2009-2018

Problem

A non-empty array A consisting of n integers is given.
A “permutation” is a sequence containing each element from 1 to n once, and only once.

For example, array A such that: A[0] = 4, A[1] = 1, A[2] = 3, A[3] = 2, is a permutation, but array A such that: A[0] = 4, A[1] = 1, A[2] = 3, is not a permutation, because value 2 is missing.

The goal is to check whether array A is a permutation.

Write a function that, given an array A, returns 1 if array A is a permutation and 0 if it is not.

For example, given array A such that: A[0] = 4, A[1] = 1, A[2] = 3, A[3] = 2, the function should return 1.
Given array A such that: A[0] = 4, A[1] = 1, A[2] = 3, the function should return 0.

Assume that:
n is an integer within the range [1 … 100,000];
• each element of array A is an integer within the range [1 … 1,000,000,000].

Complexity:
• expected worst-case time complexity is O(n);
• expected worst-case space complexity is O(n) (not counting the storage required for input arguments).

Solution

C#

using System;
class Solution {
  public int solution(int[] A) {
    Array.Sort(A);
    int n = A.Length;
    for (int i = 1; i <= n; i++) {
      if (A[i - 1] != i) {
        return 0;
      }
    }
    return 1;
  }
}

Java

import java.util.Arrays;
class Solution {
  public int solution(int[] A) {
    Arrays.sort(A);
    int n = A.length;
    for (int i = 1; i <= n; i++) {
      if (A[i - 1] != i) {
        return 0;
      }
    }
    return 1;
  }
}

JavaScript

function solution(A) {
  A.sort((a, b) => a - b);
  let n = A.length;
  for (let i = 1; i <= n; i++) {
    if (A[i - 1] != i) {
      return 0;
    }
  }
  return 1;
}

PHP

function solution($A) {
  sort($A);
  $n = count($A);
  for ($i = 1; $i <= $n; $i++) {
    if ($A[$i - 1] != $i) {
      return 0;
    }
  }
  return 1;
}