- 此问题在此处已有答案**:
Big O, how do you calculate/approximate it?(24个答案)
昨天关门了。
下面代码的时间复杂度是多少,用Big-O表示,计算的步骤是什么?
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) throws FileNotFoundException {
File file = new File("C:\\Users\\yousu\\OneDrive\\سطح المكتب\\textfile\\OptimizeBusInput.txt");
Scanner scan = new Scanner(file);
while(true) {
int n = 0;
int d = 0;
int r = 0;
int outcome = 0;
n = scan.nextInt();
d = scan.nextInt();
r = scan.nextInt();
if ( n + d + r == 0) break;
int[] morning = new int[n];
int[] afternoon = new int[n];
for (int i = 0; i < n; i++) {
morning[i] = scan.nextInt();
}
for (int i = 0; i < n; i++) {
afternoon[i] = -scan.nextInt();
}
Arrays.sort(morning);
Arrays.sort(afternoon);
for (int i = 0; i < n; i++) {
int sum = morning[i] + (-afternoon[i]) - d;
if (sum > 0) outcome += sum * r;
}
System.out.printf("%d\n", outcome);
}
我试过分别计算每个循环和if语句的时间复杂度,但我不确定如何将它们结合起来得到最终结果。我的代码遵循了Transform & Conquer技术。
1条答案
按热度按时间vwkv1x7d1#
忽略
while (true)
循环和用户输入,只分析没有用户交互的部分,我们有两个sort
-操作在大小为n
的数组上(已知为O(n * log(n))
),一个循环迭代n
次(即O(n)
)。