c++ - 需要一个关于如何解决这个算法难题的想法
问题描述
所以,这是一个 C++ 分配问题,我已经尝试了很长时间,但无法正确理解这个想法。这是问题:
给定两个长度相同的整数数组,A [0..n-1] 和 B [0..n-1]。需要找到第一对索引 i0 和 j0,i0 <= j0,使得 A [i0] + B [j0] = max A [i] + B [j],其中 0 <= i < n, 0 <= j < n,i <= j。
int maxSum(int arrx[], int arry[], int x){
int i=0, j=0;
int a;
while(i <= j && j < x){
a = arrx[i] + arry[j];
if(a > arrx[i]){
cout << i << " " << j << " ";
i = x;
}else{
j++;
}
}
return 0;
}
应该是 I/O 的示例: 输入:
4
4 -8 6 0
-10 3 1 1
输出:
0 1
解决方案
如果我理解你的问题,这应该有效。从您的输入数据中给出的答案是 7:
int maxSum(int[] arrx, int[] arry, int n) // n is the size (count) of the array
{
int i;
int j;
int a;
int maxVal;
int saveI;
int saveJ;
// first, set maxVal to minimum to make sure you get max val (0 is not necessarily min value)
maxVal = 0;
for (i = 0; i <= (n - 1); i++)
{
if (arrx[i] < maxVal)
maxVal = arrx[i];
if (arrx[j] < maxVal)
maxVal = arrx[j];
}
// now, crawl through the arrays
for (j = 0; j <= (n - 1); j++)
{
for (i = 0; i <= j; i++)
{
a = arrx[i] + arry[j];
if (a > maxVal)
{
maxVal = a;
saveI = i;
saveJ = j;
cout << i << " " << j << " " << a " ";
}
}
}
return maxVal;
}
推荐阅读
- android - 从处理程序获取数据
- python - 使用 python 在 Neo4j 中创建关系但不是全部都创建
- python - 如何使 conda-build 正常工作并找到 setup.py?
- java - (Java -> Kotlin)如何转换这段代码?(流,过滤器)
- angularjs - Firebase 身份验证仅在 localhost5000 上有效,在其他服务器上失败
- php - 我无法在 laravel 中添加用户
- python - 带有列的python holoviews布局选项卡
- image-processing - 我们可以扩展 tesseract - ocr 库,因为它是开源的吗?
- java - Velocity 中 SimpleLogger (SLF4j) 的配置错误
- c# - C# 与方法参数的逆变