我现在正在研究编码。一些我可以自己解决的任务,但是有些任务有问题。 此任务的难度是< **>。这是中等的,但我停滞了。CountNonDivisible - Codility培训任务
问题:
您给出一个非空的零索引的数组A由N个整数的。 对于每个数字A [i],使得0≤i < N,我们想要计算不是A [i]除数的数组元素数。我们说这些元素是非因数。 例如,考虑整数N = 5和阵列A使得:
A[0] = 3
A[1] = 1
A[2] = 2
A[3] = 3
A[4] = 6
对于下列元素:
A[0] = 3, the non-divisors are: 2, 6,
A[1] = 1, the non-divisors are: 3, 2, 3, 6,
A[2] = 2, the non-divisors are: 3, 3, 6,
A[3] = 3, the non-divisors are: 2, 6,
A[6] = 6, there aren't any non-divisors.
写功能:
class Solution { public int[] solution(int[] A); }
,给定的非 - 由零个整数组成的空索引数组A返回一个表示非除数的整数序列。 序列应返回为:
- 的结构的结果(在C),
- 或整数的向量(在C++),
- 或记录结果(以帕斯卡),
- 或整数数组(使用任何其他编程语言)。
例如,给定:
A[0] = 3
A[1] = 1
A[2] = 2
A[3] = 3
A[4] = 6
函数应该返回[2,4,3,2,0],如上所述。 假设:
- N是范围[1..50,000]内的整数;
- 数组A的每个元素都是[1..2 * N]范围内的整数。
复杂性:
- 预期最坏情况下的时间复杂度是O(N *日志(N));
- 预期最坏情况下的空间复杂度为O(N),超出输入存储 (不包括输入参数所需的存储空间)。
输入数组的元素可以修改。
我写了一些解决方案。但我的解决方案体积庞大,仍然具有O(n^2)的复杂性。 你能帮助我一些想法或算法如何做到最佳?这不是面试任务或其他事情。我只是在训练并尝试解决所有任务。 你可以在这里找到这个任务:http://codility.com/demo/train/第9课,课程中的第一个任务。
谢谢!
This sounds li您应该将解决方案发布到[codereview.se]并查看他们的评论。 – Keppil
我的第一个想法是玩弄Eratosthenes的筛子,看看你是否可以用解决这个问题的方式进行按摩。我不是说这就是答案。我不知道答案是什么。这正是我的第一个想法。 – ajb
@Keppil,我的解决方案是微不足道的。用一些拐杖来解决问题是降低复杂性的显而易见的方法,但它不起作用。我没有一个好主意,所以我想专注于想法和算法,而不是代码。 – stepler