gpt4 book ai didi

java - CountDiv (Codility) 挑战算法的性能问题

转载 作者:行者123 更新时间:2023-12-05 08:38:41 25 4
gpt4 key购买 nike

我需要一些帮助来解决这个 codility 挑战的算法:

编写一个函数,给定三个整数 A、B 和 K,返回 [A..B] 范围内可被 K 整除的整数个数。例如,对于 A = 6,B = 11 和 K = 2,您的函数应该返回 3,因为在 [6..11] 范围内有 3 个数可以被 2 整除,即 6、8 和 10。
A和B是[0..2,000,000,000]范围内的整数;K为[1..2,000,000,000]范围内的整数;A ≤ B。

public class Solution {
public int solution(int A, int B, int K) {

int counter = 0;
ArrayList<Integer> listOfNumbersInBetween = new ArrayList<>();

for (int i = A; i <= B; i++) {
listOfNumbersInBetween.add(i);
}

for (int arrayElement : listOfNumbersInBetween) {
if (arrayElement % K == 0) {
counter++;
}
}

return counter;

}}

如您所见,我的解决方案运行完美,但在性能方面,由于时间复杂度 O(B-A),它的得分为 0%。

我如何改进此代码以使其得分 100%?

最佳答案

使用循环是蛮力,而这样的挑战无法用蛮力完成。

这意味着您必须计算结果。像这样的挑战通常是数学问题,而不是编程问题,所以戴上数学帽吧。

所以想一想。在一个整数范围内,计算有多少可以被 K 整除。如果我要求你手动执行此操作(允许使用简单的计算器),而不使用计算机来计算暴力破解它,你会怎么做?例如。找出 111999 之间可被 13

整除的整数个数

提示

找到范围内可被 K 整除的第一个数字,以及范围内可被 K 整除的最后一个数字。对于上面的示例,这将是 117988

现在计算从第一个到最后一个整数有多少个整数可以被 K 整除,记住要计算他们两个。那么,117988 之间有多少整数可以被 13 整除?

答案:(988 - 117)/13 + 1 = 871/13 + 1 = 67 + 1 = 68

关于java - CountDiv (Codility) 挑战算法的性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62032327/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com