Как посчитать меньшие элементы на правой стороне массива, используя TreeMap в Java? - PullRequest
0 голосов
/ 09 сентября 2018

Я попытался реализовать это, но он показывает nullPointerException: он в основном делает это, находя первый элемент ниже, чем A [i], используя метод lowerKey (), затем находит расстояние между найденным выше элементом иначало карты.

 public static void main(String...aks){
    Integer arr[] = {12, 1, 2, 3, 0, 11, 4 };

   TreeMap<Integer, Integer> treeMap=new TreeMap<Integer, Integer>();
   int[] count=new int[arr.length];
   for (int i=arr.length-1;i>=0;i--){
       treeMap.put(arr[i], 1);
   }

    for (int j=arr.length-1;j>=0;j--) {
        int lowerKey = treeMap.lowerKey(arr[j]);
        count[j] = treeMap.headMap(lowerKey).size();
    }
    for(int elem: count) {
        System.out.println(elem);
    }

1 Ответ

0 голосов
/ 09 сентября 2018

Документация для lowerKey:

Возвращает наибольший ключ строго меньше, чем заданный ключ, или ноль, если такого ключа нет.

Это означает, что он вернет null для минимума массива и, следовательно, потерпит неудачу при вызове headMap, поскольку из документа headMap:

NullPointerException - если toKey является нулем, и эта карта использует естественный порядок или его компаратор не допускает нулевые ключи

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...