比如我们有一个数组A,现在我们找到它的三个最大值和位置。
A(:) 将数组处理减少到一维。 然后使用sort对排序后的结果进行排序和转置(水平显示)
sort 可以有两个返回值。 如图,将排序后的列表放入AS,将元素原来的位置放入pos。
如图所示,最大的三个元素位于位置5、4、8。
我们回到原来的数组A,图中解释了序号的含义,就是从最低维度开始逐层排序。
分别圈出 5、4 和 8。
使用 A(位置列表)获取这些位置的数字。 如图所示,位置列表为[8,4,5]。 获得了三个最大的数字。
您也可以通过编程来完成这一切。 使用 (A()) 计算数组 A 中的元素数量。
排序后取出最后3个,从len-2到len。
既然要得到最大的k个元素,那么就相当于先得到最大的元素,然后再从剩下的元素中得到最大的k-1个元素……如果继续递归的话,可以多次使用max来完成它。
由于max获取最大值的时间复杂度为n,而排序的时间复杂度不小于nlog(n),因此如果k较小,该方法可能会更快。
代码如图所示。 获得最大元素后,将该元素设置为-inf,然后循环k次。
如何查找数组中的前k个最大值
从变量窗口中我们可以看到,运行后,我们得到了最大三个数,最大三个数的位置,以及修改后的临时数组。