【发布时间】:2015-04-25 05:16:27
【问题描述】:
我从 Codility 的代码测试练习中得到以下问题:
给出了一个由 N 个不同整数组成的零索引数组 A。该数组包含 [1..(N + 1)] 范围内的整数,这意味着恰好缺少一个元素。
你的目标是找到那个缺失的元素。
写一个函数:
类解决方案 { 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)] 范围内的整数。
复杂性:
预期的最坏情况时间复杂度为 O(N); 预期的最坏情况空间复杂度为 O(1),超出输入存储(不>计算输入参数所需的存储)。
输入数组的元素可以修改。
我的做法是将给定的数组转换为ArrayList,使用ArrayList查找数组中的最低值和最高值,并从最低到最高遍历所有可能的值,然后返回缺失的值。
这解决了示例问题,但我的问题似乎是在给定数组的以下条件下我无法得到正确的答案:
“空列表和单个元素”
“缺少第一个或最后一个元素”
“单个元素”
“两个元素”
我做错了什么,解决这个问题的正确方法是什么?
【问题讨论】:
-
您缺少的是,这不是编程问题,而是数学问题。它在一组编程问题中确实没有任何合理的位置。