[英]Find largest Max list in an array
我需要找到数组的第一个 Max 列表并找到它的中间位置。 换句话说,例如有这个数组 {2, 8, 8, 8, 8, 8, 6, 3, 8, 8, 8} 我需要得到索引 3,它是第一个的中间最大列表。 我确实尝试过,但我的 C++ 代码仍然缺少一些东西。 你能帮忙吗。 谢谢
下面的代码只是一个示例,我正在处理的是一个 90 个元素的数组。
#include <iostream>
using namespace std;
int main()
{
int array[] = {2, 8, 8, 8, 8, 8, 6, 8, 0};
int Max = 0;
int StartMax = 0, EndMax = 0;
for (int m = 0 ; m < 9 ; m++){
if(array[m] > Max){
Max = array[m];
StartMax = m;
EndMax = m;
cout << "array[m] > Max " << Max << endl;
}
else if(array[m] < Max){
cout << "array[m] < Max " << Max << endl;
}
else {
int a = array[m] - array[m-1];
cout << "a = " << a << endl;
if (a == 0){
cout << "a = " << a << endl;
EndMax = m;
}
}
}
cout << "Index of Max : " << ((StartMax+EndMax)/2) << endl;
}
您的代码适用于此示例,但当您有第二个包含 2 个以上元素的“最大列表”时,它将不起作用。
确实与array[] = {2, 8, 8, 8, 8, 8, 6, 8, 8};
(注意最后8个)
我们得到的结果是: middle=4
而不是middle3
因为当你再次遇到8
时进入这个分支条件:
else {
int a = array[m] - array[m-1];
然后你进入分支if (a==0)
并将EndMax
设置为数组的末尾!
StartMax = 1
和Endmax = 8
因此middle = 4
这不是你想要的!
我建议使用布尔跟踪器来管理它:
size_t give_middle_max_list(const std::vector<int>& v) {
size_t idx_start_max = 0;
size_t idx_end_max = 0;
int max_val = v[0];
bool should_continue = false;
for(size_t i = 1; i < v.size(); i ++) {
if(v[i] > max_val) {
max_val = v[i];
idx_start_max = i;
idx_end_max = i;
should_continue = true;
}
else {
if (v[i] == max_val && should_continue == true) {
idx_end_max = i; // I am still in the first max list
}
else {
should_continue = false; // I am not in the first max list anymore !
}
}
}
std::cout << idx_start_max << ";" << idx_end_max << std::endl;
return (idx_end_max + idx_start_max) / 2;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.