Codility3 PermMissingElem

本文介绍了一种在给定的包含N个不同整数的数组中,找到唯一缺失元素的算法。该算法通过哈希表实现了O(N)的时间复杂度和O(1)的空间复杂度,适用于数组内元素范围从1到(N+1)的情况。

Task description

Find the missing element in a given permutation.

A zero-indexed 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:

int solution(vector<int> &A);

that, given a zero-indexed 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), beyond input storage (not counting the storage required for input arguments).

Elements of input arrays can be modified.

Solution

//CaptainMay AllRights Reserved
int solution(vector<int> &A) {
    // write your code in C++11
    const int n = A.size();
    int* hash = new int[n+2];
    memset(hash, 0, 4*(n+2));
    int result = 0;
    for (int i = 0; i < n; ++i)
    {
        int temp = A[i] % (n+2);
        *(hash + temp) = 1;
    }
    for (int i = 1; i < n + 2; ++i)
    {
        if(*(hash + i) == 0)
            return i;
    }
}
以上算法满足complexity O(N)space complexity O(1)


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值