有效地打印长序列

11 浏览
0 Comments

有效地打印长序列

我需要打印一个由大量的5和3组成的数字(长达100,000个整数)。我并没有将它们存储在数组中,而是仅仅记录它们的数量,即noOfThreesnoOfFives

为了简单起见,将这个数字称为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的整数,它会花费大约4-5秒的时间在控制台上打印它,这是不可接受的。

我的思路:

  • 如果noOfFives是偶数,则在for循环中打印55,这将使性能增加一倍,并将循环增加两个,否则
  • 使用与上述相同的for循环。对于noOfThrees也是如此。

但是问题在于,如果它是奇数,那么它将再次以1的步长打印。我如何有效地打印这个序列呢?

admin 更改状态以发布 2023年5月22日
0
0 Comments

您的问题似乎有点奇怪 - 我想知道是否在其他地方查看值的计算方式是使您的代码更快的逻辑方式。

但是我认为,首先在内存中构建字符串,然后再打印它将显着提高性能。

我还认为您应该查看为什么打印"B"的速度比打印"#"慢得多?,这可能对您的问题有所启发。

0
0 Comments

如果您认为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);

0