gpt4 book ai didi

java - 大斐波那契与 GCD

转载 作者:行者123 更新时间:2023-12-02 02:42:53 27 4
gpt4 key购买 nike

几天前我在编程挑战中遇到了这个问题。

enter image description here

enter image description here

在后端的 20 个测试用例中,我只得到了一个通过。这是我的解决方案

import java.util.Scanner;
class TestClass {
public static void main(String args[] ) throws Exception {
Scanner s = new Scanner(System.in);
int size = s.nextInt();
int[] input = new int[size];


long[] fiboDp = new long[1000000];
fiboDp[0] = 0;
fiboDp[1] = 1;

for(int index = 2;index<1000000;++index) {
fiboDp[index] = (fiboDp[index-1]%1000000007+fiboDp[index-2]%1000000007)%1000000007;

}

int query = s.nextInt();

for(int index = 0; index < size; ++index) {
input[index] = s.nextInt();
}

long[][] dpans = new long[size][size];

for(int i = 0; i < size; ++i) {
long gcdAns = fiboDp[input[i]];

for(int j = i; j < size;++j) {
if(i == j) {
dpans[i][j] = gcdAns;
}
else {
dpans[i][j] = gcd(dpans[i][j-1],fiboDp[input[j]]);
}
}
}

while(query > 0) {
int left = s.nextInt();
left = left-1;
int right = s.nextInt();
right = right-1;

// long ansGCD = fiboDp[input[left]];
// for(int index =left ; index<= right;++index) {
// ansGCD = gcd(ansGCD,fiboDp[input[index]]);
// }
System.out.println(dpans[left][right]);
query--;
}
}

static long gcd(long a, long b) {
return b == 0? a : gcd(b,a%b);
}

}

我想我知道为什么我的代码是错误的,因为数组的元素大小是 10^9 斐波那契数组大小最多可达 10^6。每当我访问较大的索引时,就会发生数组越界异常。但我不知道如何解决这个问题。还有其他方法吗?

最佳答案

范围查询的问题通常用线段树来解决。
这是一个很好的基本数据结构,可以作为竞争性编程的开始。

现在,我想介绍一个好的属性,即。
GCD( 斐波那契函数(a[l]), 斐波那契函数(a[l + 1]), ... , 斐波那契函数(a[r]) ) = 斐波那契函数( GCD(a[l], a[l + 1], . ..,a[r]))。

先决条件:
1. 使用线段树查找范围的 GCD => GeeksForGeeks
2. 在 O(log n) 内快速查找斐波那契数。

我的 C++ 代码以及所有已通过的案例:HackerEarth

关于java - 大斐波那契与 GCD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45125461/

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