【发布时间】:2014-12-04 07:59:20
【问题描述】:
我遇到了关于hackerrank 的问题。 https://www.hackerrank.com/challenges/countingsort4
由于超时,我的第一次尝试通过了除最后一个以外的所有测试用例。 在未能提出更有效的算法后,我使用 StringBuilder 改进了代码,而不是直接连接字符串。这使运行时间从超过 5 秒增加到 3.5 秒。
我的问题是有没有其他方法可以提高运行时间? 谢谢。
以下是我的代码。
public class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int N = scanner.nextInt();
scanner.nextLine();
int[] oriNum = new int[N];
String[] oriStr = new String[N];
int[] count = new int[100];
int[] indices = new int[100];
int[] output = new int[N];
// save the originals and the count array
for (int i = 0; i < N; i++) {
oriNum[i] = scanner.nextInt();
oriStr[i] = scanner.nextLine().trim();
count[oriNum[i]]++;
}
// accumulate the count array
indices[0] = 0;
for (int i = 1; i < 100; i++) {
indices[i] = indices[i-1] + count[i-1];
}
// output order
for (int i = 0; i < N; i++) {
int num = oriNum[i];
output[indices[num]++] = i;
}
int bar = N/2;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < N; i++) {
int index = output[i];
if (index < bar)
sb.append("- ");
else
sb.append(oriStr[index]+ " ");
}
System.out.println(sb.toString());
}
}
【问题讨论】:
-
代替 sb.append(oriStr[index]+ " ");使用 sb.append(oriStr[index]).append(" ");
-
这个问题似乎跑题了,因为它要求进行 Code Review,因此属于 Code Review SE。
-
如果您在搜索如何根据所提到的 HackerRank 问题中的要求使计数排序稳定时偶然登陆该线程,那么请参阅这篇文章 - How is counting sort a stable sort?
标签: java optimization string-concatenation counting-sort