java - 在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));
}
解决方案
您的示例在这种情况下不应该使用递归的方式不太好。但无论如何,您可以避免每次都复制您的数组,方法是使用带有 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 递归的最大数量与每个递归比较元素。
推荐阅读
- firebase - 我可以请求发送到设备的所有推送通知都显示在屏幕上吗?
- c# - 如何在加载 Window 之前使用 Dispatcher.PushFrame?
- python - 请求库中的 selenium driver.page_source 等效项
- objective-c - Swift 在从 Objective-C 子类化的类中覆盖 init()
- c# - 如何在 azure 函数中验证 jwt 令牌
- r - R中write.csv函数的输出文件的奇怪问题。在按预期工作之前需要打开和关闭csv输出文件
- sftp - WinSCP 系统找不到指定的路径
- javascript - Target Sum 没有输出正确的值
- firebase - 将 SearchField 添加到 StreamBuilder 从 Firestore 读取
- r - 通过计数重复将向量转换为矩阵