我昨天进行了在线编码测试。问题并不难解决,但我无法达到所需的运行时间。问题如下:
给定1 <= M,N <= 10 ^ 5找到对A,B的计数:
这是我的解决方案:
我注意到这种关系是对称的,所以如果假设M> = N,想象我们在M * N矩阵上搜索有效点,我只需要搜索矩阵的以下三个部分:
对角线上方的项目:(i,j)其中1 <= i <1。 j&lt; = N.如果找到有效对,则将计数器增加2。 (对称关系)
对角线元素。
项目int(i,j)其中N + 1&lt; = i&lt; = M,并且1 <= j <= N
我的java解决方案如下
static int cubeNumbers(int M, int N) {
int count = 0;
if (N > M) {
int temp = N;
N = M;
M = temp;
}
for (int i = 1; i <= N; i ++) {
for (int j = i + 1; j <= N; j ++) {
if (isValid(i, j)) {count += 2;}
}
if (isValid(i, i)) {count += 1;}
}
for (int i = N + 1; i <= M; i ++) {
for (int j = 1; j <= N; j ++) {
if (isValid(i, j)) {count += 1;}
}
}
return count;
}
private static boolean isValid(int A, int B) {
double result = Math.pow(Math.pow(A, 1.0/3) + Math.pow(B, 1.0/3), 3);
return (result % 1) == 0;
}