【发布时间】:2015-05-14 07:09:23
【问题描述】:
输入以单行 (t<=10) 中的测试用例数 t 开头。在接下来的 t 行中的每一行中,有两个或多个数字 m 和 n (1 <= m <= n <= 1000000000, n-m<=100000) 以空格分隔。
将每个数字打印在单独的行中,可以进一步用于求和
输入
2
50 100
100 50 105
输出
50
100
100
50
105
现在这是我写的给我输出的代码
import java.util.Scanner;
import java.util.StringTokenizer;
public class Generation {
public static void main(String[] str) {
Scanner keyboard = new Scanner(System.in);
int inputSize;
do {
System.out.println("Enter the value of T Size");
inputSize = keyboard.nextInt();
keyboard.nextLine();
if (inputSize < 2 || inputSize > 10) {
System.out.println("Not a Valid Input Size");
}
} while (inputSize < 2 || inputSize > 10);
String[] inputValue = new String[inputSize];
int tokenCount = 0;
for (int i = 0; i < inputSize; i++) {
System.out.println("Enter the inputs");
inputValue[i] = keyboard.nextLine();
StringTokenizer strToken = new StringTokenizer(inputValue[i], " ");
tokenCount += strToken.countTokens();
}
keyboard.close();
//suppose this is 2nd part
int[] splitedString = new int[tokenCount];
int tempTokenCount = 0;
for (int i = 0; i < inputSize; i++) {
String[] tempSplitArray = inputValue[i].split(" ");
for (int j = 0; j < tempSplitArray.length; j++) {
splitedString[tempTokenCount] = Integer
.parseInt(tempSplitArray[j]);
tempTokenCount++;
}
}
/*for (String s : inputValue) {
System.out.println(s);
}*/
for (Integer s : splitedString) {
System.out.println(s);
}
}
}
现在我的问题是如何优化我必须使用两个 for 循环的第二部分,这会导致 O(npower2) 时间复杂度。这种情况的解决方法是什么?
【问题讨论】:
-
你可以使用
split()方法来代替StringTokenizer。 -
为什么不直接通过Scanner读取输入流?
-
@Prashant 这将如何改变时间复杂度?
-
@TagirValeev 您能否提供一个指导链接或显示可能的解决方法,因为这些值也必须用于求和
-
@TagirValeev 另见顶部提到的要求
标签: java optimization java.util.scanner string-split