获取Java数组中n个最大值的索引

布赖恩

我有一个大小为1000的数组。如何找到五个最大元素的索引(索引)?

下面显示了带有设置代码的示例和我的尝试:

Random rand = new Random();
int[] myArray = new int[1000];
int[] maxIndices = new int[5];
int[] maxValues = new int[5];

for (int i = 0; i < myArray.length; i++) {
  myArray[i] = rand.nextInt();
}

for (int i = 0; i < 5; i++) {
  maxIndices[i] = i;
  maxValues[i] = myArray[i];
}

for (int i = 0; i < maxIndices.length; i++) {
  for (int j = 0; j < myArray.length; j++) {
    if (myArray[j] > maxValues[i]) {
      maxIndices[i] = j;
      maxValues[i] = myArray[j];
    }
  }
}

for (int i = 0; i < maxIndices.length; i++) {
  System.out.println("Index: " + maxIndices[i]);
}

我知道问题在于,它一直在向所有最大元素分配最高值。我不确定如何解决此问题,因为我必须保留的值和索引myArray

我不认为排序是一种选择,因为我需要保留索引。实际上,这是我特别需要的指标。

科西卡

排序是一种选择,但要消耗额外的内存。考虑以下算法。

1. Allocate additional array and copy into - O(n)
2. Sort additional array - O(n lg n)
3. Lop off the top k elements (in this case 5) - O(n), since k could be up to n
4. Iterate over the original array - O(n)
    4.a search the top k elements for to see if they contain the current element - O(lg n)

因此,步骤4是(n * lg n),就像排序一样。整个算法为n lg n,并且编码非常简单。

这是一个快速而肮脏的例子。其中可能存在错误,并且很明显空检查等开始起作用。

导入java.util.Arrays;

class ArrayTest {

    public static void main(String[] args) {
        int[] arr = {1, 3, 5, 7, 9, 2, 4, 6, 8, 10};
        int[] indexes = indexesOfTopElements(arr,3);
        for(int i = 0; i < indexes.length; i++) {
            int index = indexes[i];
            System.out.println(index + " " + arr[index]);
        }
    }

    static int[] indexesOfTopElements(int[] orig, int nummax) {
        int[] copy = Arrays.copyOf(orig,orig.length);
        Arrays.sort(copy);
        int[] honey = Arrays.copyOfRange(copy,copy.length - nummax, copy.length);
        int[] result = new int[nummax];
        int resultPos = 0;
        for(int i = 0; i < orig.length; i++) {
            int onTrial = orig[i];
            int index = Arrays.binarySearch(honey,onTrial);
            if(index < 0) continue;
            result[resultPos++] = i;
        }
        return result;
    }

}

您还可以采取其他措施来减少此操作的开销。例如,您可以选择使用仅跟踪最大5的队列来进行排序,而不是进行排序。作为队列,int它们的值可能必须装箱才能添加到集合中(除非您自己滚动),这会大大增加开销。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

VBA-获取数组中第n个最大值的索引

来自分类Dev

从pandas数组中获取N个最大值,并保留索引和列标题

来自分类Dev

使用随机抢七获得numpy数组中N个最大值的索引

来自分类Dev

使用随机抢七获得numpy数组中N个最大值的索引

来自分类Dev

范围中第N个最大值的索引

来自分类Dev

我如何从数组中获取4个最大值

来自分类Dev

从数组中获取5个最大值的键

来自分类Dev

在oneliner中选择数组中的n个最大值

来自分类Dev

Python从字典中获取N个最大值

来自分类Dev

如何从给定的范围数组中获取具有最小最大值的匹配数组索引

来自分类Dev

GNU Octave / Matlab:如何获取数组中三个最大值的索引?

来自分类Dev

数组最大值的索引

来自分类Dev

如何从javascript中的数组中获取包含负数的最大值的索引?

来自分类Dev

如何获取数组中最大值的索引?

来自分类Dev

python数组获取最大值并存储索引

来自分类Dev

如何从多维数组中获取每个索引的最大值-javascript

来自分类Dev

在Java中获取最大值sql

来自分类Dev

获取列表中具有相同最大值的最后一个索引

来自分类Dev

一个模板函数,用于获取向量中的最大值及其对应的索引

来自分类Dev

获取列表中具有相同最大值的最后一个索引

来自分类Dev

如何获取与数组 B 中唯一值对应的数组 A 中所有最大值的索引?

来自分类Dev

在java中获取随机生成的数组中的最小值和最大值

来自分类Dev

使用NumPy在数组中查找最大值的索引

来自分类Dev

显示数组中的最大值和索引号

来自分类Dev

如何使用python从数组中返回最大值索引?

来自分类Dev

获取R向量中的所有最大值索引

来自分类Dev

获取变量,其值是数组中的最大值

来自分类Dev

从值数组中获取多个最大值

来自分类Dev

如何在Java中获取二维数组列表的最大值/最小值

Related 相关文章

  1. 1

    VBA-获取数组中第n个最大值的索引

  2. 2

    从pandas数组中获取N个最大值,并保留索引和列标题

  3. 3

    使用随机抢七获得numpy数组中N个最大值的索引

  4. 4

    使用随机抢七获得numpy数组中N个最大值的索引

  5. 5

    范围中第N个最大值的索引

  6. 6

    我如何从数组中获取4个最大值

  7. 7

    从数组中获取5个最大值的键

  8. 8

    在oneliner中选择数组中的n个最大值

  9. 9

    Python从字典中获取N个最大值

  10. 10

    如何从给定的范围数组中获取具有最小最大值的匹配数组索引

  11. 11

    GNU Octave / Matlab:如何获取数组中三个最大值的索引?

  12. 12

    数组最大值的索引

  13. 13

    如何从javascript中的数组中获取包含负数的最大值的索引?

  14. 14

    如何获取数组中最大值的索引?

  15. 15

    python数组获取最大值并存储索引

  16. 16

    如何从多维数组中获取每个索引的最大值-javascript

  17. 17

    在Java中获取最大值sql

  18. 18

    获取列表中具有相同最大值的最后一个索引

  19. 19

    一个模板函数,用于获取向量中的最大值及其对应的索引

  20. 20

    获取列表中具有相同最大值的最后一个索引

  21. 21

    如何获取与数组 B 中唯一值对应的数组 A 中所有最大值的索引?

  22. 22

    在java中获取随机生成的数组中的最小值和最大值

  23. 23

    使用NumPy在数组中查找最大值的索引

  24. 24

    显示数组中的最大值和索引号

  25. 25

    如何使用python从数组中返回最大值索引?

  26. 26

    获取R向量中的所有最大值索引

  27. 27

    获取变量,其值是数组中的最大值

  28. 28

    从值数组中获取多个最大值

  29. 29

    如何在Java中获取二维数组列表的最大值/最小值

热门标签

归档