直接上代码
/**
* 排序后返回索引
* @param v
* @param <T>
* @return
*/
static <T> int[] sortToIndex(T[] v) {
Map<T, Queue<Integer>> indexMap = new HashMap<>();
for (int i=0; i<v.length; i++) {
Queue<Integer> indexes = indexMap.get(v[i]);
if (indexes == null)
indexes = new ArrayDeque<>();
indexes.add(i);
indexMap.put(v[i], indexes);
}
List<T> vSorted = Arrays.stream(v).sorted().collect(Collectors.toList());
int[] indexes = new int[vSorted.size()];
for (int i=0; i<vSorted.size(); i++) {
Queue<Integer> itemIndexes = indexMap.get(vSorted.get(i));
Integer index = itemIndexes.poll();
if (index == null)
throw new RuntimeException("itemIndexes为空");
indexes[i] = index;
}
return indexes;
}
欢迎大家关注我的公众号