[codility 3-2] PermMissingElem

문제출처

문제

An array A consisting of N different integers is given. The array contains integers in the range [1..(N + 1)], which means that exactly one element is missing.

Your goal is to find that missing element.

Write a function: function solution(A); that, given an array A, returns the value of the missing element.

For example, given array A such that: A[0] = 2 A[1] = 3 A[2] = 1 A[3] = 5 the function should return 4, as it is the missing element.

Assume that:

  • N is an integer within the range [0..100,000];
  • the elements of A are all distinct;
  • each element of array A is an integer within the range [1..(N + 1)].

Complexity:

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

풀이과정

  • 1부터 N까지 연속된 숫자가 random한 배열로 주어진다. 이 때, 주어진 array는 하나의 ‘Missing Element’가 존재한다.
  • 1부터 N까지 모든 수를 더한 값과, 주어진 Array(A)의 원소들을 모두 더한 값을 비교하면 그 차이가 Missing Element가 된다.
  • JavaScript의 문법으로 인해 1부터 N까지의 합은 ‘가우스 연산’으로, A의 합은 reduce 메소드로 구할 수 있을 것이다.
    (Python은 sum()을 통해 쉽게 주어진 List의 합을 구할 수 있다.)

작성코드

  • Detected time complexity: O(N) or O(N * log(N))
function solution(A) {
    if (A.length === 0) {
        return 1;
    }
    return (((A.length + 2) * (A.length + 1)) / 2) - A.reduce(function(accumulator, currentvalue) {
        return accumulator+currentvalue;
    })
}


© 2018. by Jae