比较并找到长度最长的ArrayList

时间:2017-05-23 15:05:55

标签: java arraylist

我正在解决与Collat​​z问题相关的任务。我创建了一个从任何起始编号生成1的方法:

    public static void sequence(int value)
        {
            ArrayList<Integer> calc = new ArrayList<Integer>();
        calc.add(value);

while(value != 1)
    {

            if(value % 2 == 0)
            {
                value = value / 2;
            }

            else if(value % 2 != 0)
            {
                value = (value * 3) + 1;
            }

            calc.add(value);

            if(value == 1 )
            {
                    System.out.println(calc);
                }
        }
    }

    public static void main(String[] args) {
        for(int x = 1000000; x > 0; x--)
        {
        sequence(x);
        }
    }

}

我的任务的下一部分是找到一种方法,它会发现最长的Collat​​z序列低于1,000,000。

我提出了几个解决方案,例如下面的解决方案。当然,这些解决方案都没有奏效。

while(value != 1)
        {

            if(value % 2 == 0)
            {
                value = value / 2;
            }

            else if(value % 2 != 0)
            {
                value = (value * 3) + 1;
            }

            calc1.add(value);

            if(calc1.size() > calc2.size())
            {
                calc2 = calc1;
            }

        }
        System.out.println(calc2);
    }

有没有人可以帮助并指导我找到使用2个或更多ArrayLists的比较找到最长的Collat​​z序列的正确方法。如果有比使用ArrayList更好的选项,我非常欢迎这些方法。 感谢。

1 个答案:

答案 0 :(得分:0)

您需要维护一个maxList,它将使用最长的序列进行更新。

您可以在每次调用中将其传递给calc()方法,也可以将其声明为类变量,以便在calc()main()方法之上使用它。

// to update the max list
maxList = (list.size() > maxList.size()) ? list : maxList;

最后只打印结果

System.out.println(maxList.size());
System.out.println(maxList);

更新:您需要找出在calc()方法中传递数字的有效方法 对于大输入,它会抛出java.lang.OutOfMemoryError