【发布时间】:2013-01-01 22:45:37
【问题描述】:
该程序的目标是使数组中的所有数字都相同。您必须每次递增数组中的所有值,除了一个。然后程序将打印出使所有数字相同所需的最少步数。我有一个我认为是可行的解决方案,我只是想让它更有效率,有人有什么想法吗?在下面的代码中,用户将数字的初始值输入到数组中,然后计算所需的步数
public static void main(String[] args) throws NumberFormatException, IOException
{
counter=0;
size=sc.nextInt();
input= new int[size];
for(int k=0; k<size; k++)
{
input[k]=sc.nextInt();
}
while(!isAllEqual(input))
{
Arrays.sort(input);
for(int k=0; k<input.length-1; k++)
{
input[k]++;
}
counter++;
}
pw.println(counter);
public static boolean isAllEqual(int[] a){
for(int i=1; i<a.length; i++){
if(a[0] != a[i]){
return false;
}
}
return true;
}
【问题讨论】:
-
在有关算法的问题中,您应该省略处理用户输入。只需创建一个将所需值作为参数的函数,这样就更具可读性。
-
另外,
isAllEqual()是一个主要的性能损失,也不需要排序。只需找到最大值一次,然后递增到那个值 - 如果您知道您的算法会到达那里,则无需检查您是否满足条件。 -
一定要这样吗?为什么不循环遍历数组以找到最大和最小的数字,然后将 arra 中的每个插槽设置为最大的数字。步数最大 - 最小。
-
诀窍是你必须递增数组中除一个以外的所有数字,我认为这并不简单。
-
@sjr - 实际上,如果您要实际增加(我不确定您是否需要这样做),那么您需要避免增加 all 条目已经达到最大值。
标签: java arrays performance increment