首页 > 解决方案 > 在Java中的整数数组列表中找到最小值的递归函数

问题描述

这是我作为自学 java 的一部分一直在考虑的问题。该问题包括编写一个递归函数,该函数在 Integers 的 ArrayList 中找到最小值。下面你会发现我的尝试。我相信它正在按预期工作,但我想知道是否有更好的方法来完成这项工作。任何意见表示赞赏。

public static int findMin(ArrayList<Integer> numbers){
        // Base Case
        if(numbers.size()==1){
            return numbers.get(0).intValue();
        }
    
  
        ArrayList<Integer> numbers_short = new ArrayList<Integer>(numbers);
        numbers.remove(numbers.size()-1);

        return Math.min(numbers_short.get(numbers_short.size()-1).intValue(), findMin(numbers));
    }

标签: javaarraylistintegerminimum

解决方案


您的示例在这种情况下不应该使用递归的方式不太好。但无论如何,您可以避免每次都复制您的数组,方法是使用带有 start 和 end 参数的方法仅分析初始数组的一部分。

像这样的东西:


    public static int findMin(ArrayList<Integer> numbers) {
        return findMin(numbers, 0, numbers.size() - 1);
    }

    public static int findMin(ArrayList<Integer> numbers, int start, int end) {
        if (end == start)
            return numbers.get(start);
        int middle = start + (end - start) / 2;
        return Math.min(findMin(numbers, start, middle), findMin(numbers, middle + 1, end));
    }

并在需要时添加检查以防数组为空。

我使用“中间”方法的原因是每次它将数组除以 2,这意味着最后它会限制堆栈溢出的风险,因为它将除以 2 递归的最大数量与每个递归比较元素。


推荐阅读