在这个问题中,我们给定一个大小为 n 的数组 arr[] 和一个数字 S。我们的任务是找到修改后的数组的最小值的最大可能值。 p>
这里是修改数组的规则,
使用这些约束,我们需要找到新数组并返回数组中最小元素的最大值。
让我们举个例子来理解这个问题,
Input : arr[] = {4, 5, 6} S = 2 Output : 4
说明
修改后的数组为{4, 5, 5}
解决方法
我们需要最大化修改后数组的最小值。我们将使用二分搜索来寻找最小值的最佳值,该最小值介于 0(可能的最小值) 和 arrmin(最大可能的)。我们将检查差异以获得最小的可能值。
一些特殊条件,
如果 S 大于数组总和,则不可能有解决方案。
如果S 等于数组总和,0 将是最小元素的值。
示例
说明我们解决方案工作原理的程序
#include <iostream> using namespace std; int findmaximisedMin(int a[], int n, int S){ int minVal = a[0]; int arrSum = a[0]; for (int i = 1; i < n; i++) { arrSum += a[i]; minVal = min(a[i], minVal); } if (arrSum < S) return -1; if (arrSum == S) return 0; int s = 0; int e = minVal; int ans; while (s <= e) { int mid = (s + e) / 2; if (arrSum - (mid * n) >= S) { ans = mid; s = mid + 1; } else e = mid - 1; } return ans; } int main(){ int a[] = { 4, 5, 6 }; int S = 2; int n = sizeof(a) / sizeof(a[0]); cout<<"The maximum value of minimum element of the modified array is "<<findmaximisedMin(a, n, S); return 0; }
输出
The maximum value of minimum element of the modified array is 4
以上就是找到C++中修改后数组的最小值的最大可能值的详细内容,更多请关注编程之家其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。