java - 递归地最小化塔之间的最大差异
问题描述
给定 n 个塔的高度和一个值 k。我们需要将每个塔的高度增加或减少 k(仅一次),其中 k > 0。任务是最小化修改后最长和最短塔的高度之间的差异,并输出此差异。
输入 {1, 5, 15, 10}
K = 3
输出为 8
输入 {1, 10, 14, 14, 14, 15}
K = 6
输出为 5
我意识到这可以通过 DP 技术/贪婪技术来解决。谁能帮我通过递归解决这个问题。下面的示例代码片段。感谢您的回复。
public class TowerHeights {
public static void main(String[] args) {
int[] towerHeight = {1,5,15,10};
int k = 3;
Arrays.sort(towerHeight);
int min = towerHeight[0] + k;
int max = towerHeight[towerHeight.length-1] - k;
minimize(towerHeight,1,k,min,max);
}
public static void minimize(int[] towerHeight, int index, int k, int min, int max){
if(index<=towerHeight.length-2){
//I need help in completing this function recursively
}
}
}
问题参考: https ://www.geeksforgeeks.org/minimize-the-maximum-difference-between-the-heights/
解决方案
我认为这不是 DP 或贪婪的子问题的问题。要以递归方式解决,请尝试这种方式,例如使用递归进行循环
public static int minimize(int[] towerHeight, int index, int k, int min, int max){
if(index<=towerHeight.length-2){
int subtract = towerHeight[index] - k;
int add = towerHeight[index] + k;
if (!(subtract >= min || add <= max)){
if (max - subtract <= add - min) min = subtract;
else max = add;
}
return Math.min(minimize(towerHeight,index+1,k,min,max), max - min);
}
else {
return max-min;
}
}
推荐阅读
- c - 如果设置了所有低 7 位而不设置分支,则设置第 8 位
- ionic-framework - 面向企业的 iOS 应用分发(将应用分发给客户组织)
- html - 用于格式化表格标题中表格单元格值的 HTML 代码?
- corda - 在构建多节点多方的 Corda 网络时,如何管理证书更新?
- r - 如何使用 shinyFiles 从我的服务器端或本地机器上传数据集?
- python - pytorch multiprocessing - TypeError:'str'对象不可调用
- android-recyclerview - 从手机后台任务中删除应用程序后,音频不在后台播放
- logback - logback TimeBasedRollingPolicy 将日志内容附加到归档文件
- flutter - 为什么我无法验证和保存我的表单?(扑)
- python - 如何将参数放入文件路径?