java - 通过减少和征服找到最大的
问题描述
我有一个需要帮助解决的问题,基本上,这个问题要求我使用归约和征服算法来找到最大的元素。
问题描述:返回非空整数数组中的最大元素。我们将使用只考虑从给定索引开始并在另一个索引结束的数组的一部分的约定。通过这种方式,递归调用可以通过数组的任何部分进行。初始调用将传入索引 0 和最后一个元素的索引。
我想到的一些事情是使用递归来解决这个问题,但我一直在努力解决递归问题,因为它是一个我没有完全掌握的概念。任何人都可以指出我正确的方向吗?欢迎任何想法或建议。谢谢你。
到目前为止,这是我的想法:
编辑:更新的代码
public int max(int[] nums, int begin, int end) {
int maxVal = begin;
if (begin == end) return nums[0];
else if(begin < end){
maxVal = max(nums, begin+1, end);
if (maxVal > nums[end-begin]) return maxVal;
else return nums[end-begin];
}
return maxVal;
}
这将是输出:
最大值([2, 1, -2, 3, 8], 0, 4) → 8
最大值([6, 2, -4], 0, 2) → 6
最大值([3], 0, 0) → 3
解决方案
执行以下操作:
public class Main {
public static void main(String[] args) {
// Tests
System.out.println(max(new int[] { 2, 1, -2, 3, 8 }, 0, 4));
System.out.println(max(new int[] { 2, 1, -2, 8, 3 }, 0, 4));
System.out.println(max(new int[] { 2, 1, 8, -2, 3 }, 0, 4));
System.out.println(max(new int[] { 2, 8, 1, -2, 3 }, 0, 4));
System.out.println(max(new int[] { 8, 2, 1, -2, 3 }, 0, 4));
}
static int max(int[] nums, int begin, int end) {
if (begin >= end) {
return nums[end];
}
if (nums[begin] > nums[end]) {
return max(nums, begin, end - 1);
} else {
return max(nums, begin + 1, end);
}
}
}
输出:
8
8
8
8
8
推荐阅读
- c# - 对具有 15000 多个元素的数组进行排序时出现堆栈溢出异常
- python - Sagemaker XGBoost 超参数调整错误
- android - 设置 AppCompat Spinner 背景颜色的样式
- .net-core - 为什么在 Entity Framework Core 中使用 FindAsync 时出现空引用异常?
- javascript - 在 php 表单提交后使用自定义消息重定向到 html
- python - 如何在将aws lambda与django一起使用时从s3访问google电子表格json文件
- java - JDBC MySQL 在代码之外配置用户名/密码凭证
- react-native - RN ScrollView 减少所需的滑动量
- java - 为什么JVM找不到SpringApplication类的定义?
- bootstrap-4 - 在行阈值上方的表格列中隐藏和显示项目