我打印的数字是5和3(最多100,000英尺)的巨大序列。我没有将其存储在数组中,而是将其计算在noOfThrees
和noOfFives
。
为简单起见,请拨打此号码x
。
由于我必须在序列中打印最大的数字,x
最初将是5'然后是3&#(我有工作逻辑可以打印,如果有的话)没有5或没有3'
要打印号码,我正在使用这样的for循环:
for(int i=0; i<noOfFives; i++)
System.out.print(5);
for(int i=0; i<noOfThrees; i++)
System.out.print(3);
但是如果x
是一个100,000长的int数,那么在控制台上打印它需要大约4-5秒,这是不可取的。
我的看法:
noOfFives
是偶数,则在for循环中打印55
,将性能提高x2并将循环增加2,否则noOfThrees
。但问题在于它是否奇怪,它将再次以1的步骤打印。如何有效地打印此序列?
答案 0 :(得分:4)
如果您认为问题的数量是print
,那么您可以将其减少到1:将正确数量的3和5放入char数组中,然后打印出来:
char[] cs = new char[noOfFives + noOfThrees];
Arrays.fill(cs, 0, noOfFives, '5');
Arrays.fill(cs, noOfFives, cs.length, '3');
System.out.print(cs);
答案 1 :(得分:1)
您的问题似乎有点奇怪 - 我想知道让代码更快的合理方法是在其他地方查看如何计算这些值。
但是我认为首先在内存中构建字符串然后打印它会显着提高性能。
我还认为你应该看看Why is printing "B" dramatically slower than printing "#"?,这可能会对你的问题有所启发。
答案 2 :(得分:0)
我认为你可以使用循环展开,它可以减少循环的执行时间 例如:
for(int i=0; i<noOfFives; i+=5) {
System.out.print(5);
System.out.print(5);
System.out.print(5);
System.out.print(5);
System.out.print(5);
}