如何查找数组集合中第二大元素的索引
How to find the index of second largest element in an array collection?
我有一个函数,可以计算柜台上每次结账所花费的总和,计算后,我想找到最好的两个结账柜台,我能够找到最大结账的索引,但我对找到第二大结账柜台有一点困惑。这是代码。
for (int j = 0; j < Bq[i]; j++)
{
sumM += p.GetValue(i, j).GetSum();
sumT += p.GetValue(i, j).GetTime();
}
indexofmax = i;
if(sumM > maxmoney)
{
Secondbestcheckout=firstbestcheckout;
firstbestcheckout = indexofmax+1;
maxmoney = sumM;
secondindex = Secondbestcheckout;
indexofmax =firstbestcheckout;
}
fr << i+1 << fixed << setw(9) << setprecision(2) << sumM
<< " " << setw(6) << sumT << endl;
}
fr << "The first best checkout interms of money collected is "
<< firstbestcheckout << "And the second best checkout is "
<< secondindex << endl;
此代码成功打印最大结账柜台的索引,但未成功打印第二大结账柜台的索引。
只有当你表现最好时,才会发送第二好的。
示例 40、60、50、30
使用您的代码,您设置的最佳时间是 40。 然后 60 取代它,40 成为第二好的。 THen 50 到达,但它的表现并没有超过最好的,所以被忽略为第二好。
您必须添加一个子句来处理这种情况:
...
if (sumM > maxmoney) // as you already did
{
Secondbestcheckout=firstbestcheckout;
firstbestcheckout = indexofmax+1;
secondmaxmoney = maxmoney; // <<NEW INSTRUCTION - of course, you'll need to create and init secondmaxmoney somewhere ;-)
maxmoney = sumM;
secondindex = Secondbestcheckout;
indexofmax =firstbestcheckout;
}
else if (sumM > secondmaxmoney) // NEW STATEMENT
{
Secondbestcheckout= ...; // as above, but unclear for me what the difference with secondinex is
secondmaxmoney = maxmoney; // update amount onf second best
secondindex = i; // or i+1 ? Not clear if you start from 0 or from 1
}
... // rest or your code
如果您可以将所有值保留在内存中(即,如果您的签出次数少于数十亿次),则可以使用 std::partial_sort
对两个最大的元素进行排序(但保留其余元素的未排序),也可以使用std::nth_element
两次,一次使用 1,一次使用 2。(在这两种情况下,你的谓词都应该是std::greater
,我想。
如果您需要以流式处理方式(即使用常量空间)处理值,则需要单独跟踪每个订单索引,基本上与您已经尝试的类似。Boost.Accumulators可能有一些工具来简化这项任务。
不要让它变得复杂,它很简单:
INDX = (-ARRAY).argsort()[:N]
其中 N 是您正在搜索的元素数,例如 N=2(两个最大的数字)ARRAY 是你正在搜索的 numpy 数组,例如 ARRAY=np.array[10.1,9,10,5,1,3]并且,INDX 是数组中元素索引的列表。显然,INDX 的长度等于 N。
相关文章:
- 在对向量中查找元素的索引
- 当该数组的索引中没有元素时,指针指向什么?
- 如何在 STL 函数中找到传递给谓词的元素的索引?
- 如何在C++中递归地找到max元素的索引?
- 编译器(Visual C++)如何优化按索引访问矢量元素?
- 保持排序的数据结构,允许log N插入时间,并且可以返回我在log N中查找的元素的索引
- 使用推力根据索引更改某些元素的值
- 为什么 min_element() 返回最小元素的索引,而不是迭代器?
- CPtrList - 如何获取元素的索引?
- 获取结构 c++ 中元素的索引
- C++ STL 数据结构常时按索引推送/弹出/随机访问,并具有指向元素的可靠指针
- 矢量指针索引处的读取元素
- C++函数返回两个 char 数组的相同索引元素
- 特征:类似 numpy 的元素索引
- 如何在另一个数组中找到一个未排序数组的不同元素索引?
- C 无法使用嵌套环将数组的元素索引
- Opencv Mat的元素索引产生垃圾
- 在c++中,当元组的元素索引在运行时已知时,是否有可能获得该元素的类型?
- 按内容访问QVector元素索引
- C++ 矢量元素索引