求最大元素位置的分治算法
Divide and conquer algorithm to find position of max element
我正在尝试使用分治算法查找数组中最大元素的索引。目前,输出正确地输出了数组的最大值,但我不知道如何传递最大元素的位置。
#include <iostream>
using namespace std;
int maxElement(int a[], int l, int r) {
if(r - l == 1) {
cout << "R - L == 1 " << "Array value: " << a[l] << " Pos: " << l << endl;
return a[l];
}
int m = (l + r) / 2;
int u = maxElement(a, l, m);
int v = maxElement(a, m, r);
return u > v ? u : v;
}
/* Driver program to test above functions */
int main() {
int Arr[] = {1, 4, 9, 3, 4, 9, 5, 6, 9, 3, 7};
int arrSize = sizeof(Arr)/sizeof(Arr[0]);
cout << maxElement(Arr, 0, arrSize) << endl;
return 0;
}
您可以返回一个std::pair
,它包含数组值&位置。
#include <iostream>
#include <utility>
using namespace std;
std::pair<int, int> maxElement(int a[], int l, int r) {
if(r - l == 1) {
cout << "R - L == 1 " << "Array value: " << a[l] << " Pos: " << l << endl;
return {a[l], l};
}
int m = (l + r) / 2;
auto up = maxElement(a, l, m);
auto vp = maxElement(a, m, r);
return up.first > vp.first ? up : vp;
}
/* Driver program to test above functions */
int main() {
int Arr[] = {1, 4, 9, 3, 4, 9, 5, 6, 9, 3, 7};
int arrSize = sizeof(Arr)/sizeof(Arr[0]);
auto result = maxElement(Arr, 0, arrSize);
cout << result.first << ", l = " << result.second << endl;
return 0;
}
您可以使用它来获取最大元素的索引,而无需使用配对
我希望这能帮助你
int DAC_Max_Postion(int arr[], int index, int l)
{
int max;
if(index >= l - 2)
{
if(arr[index] > arr[index + 1])
return index;
else
return index + 1;
}
max = DAC_Max(arr, index + 1, l);
if(arr[index] > arr[max])
return index;
else
return max;
}
相关文章:
- 将值指定给向量(2D)的向量中的某个位置
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 使用Unreal C++获取VR耳机的世界位置/方向
- 写入位置0x0000000C时发生访问冲突
- 基于ELO的团队匹配算法
- C++选择排序算法中的逻辑错误
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 有没有办法将谓词中的元素偏移量传递给 std 算法?
- C++A*算法并不总是在路径中具有目标节点
- 排序算法c++
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 构建可组合有向图(扫描仪生成器的汤普森构造算法)
- 求最大元素位置的分治算法
- (C++)在圆内夹紧 2D 位置(使用中点圆算法绘制)
- 在C++中标记双精度损失的算法不会标记正确的位置
- 如何应用泛洪算法寻找一个加权二维矩阵在指定的源和目的位置之间的最优路径
- 如何有效地并行化分治算法
- 分治算法:求矩阵的最小值
- 递归分治算法修改
- 连接两个向量的分治算法c++