如何解决在 Java 中使用集合时如何缩短时间?
如果“玩家”被添加到排名数组中,我的代码应该返回它的排名。我的代码有效,但超出了时间限制。关于我可以做些什么来减少时间的任何建议?
public static List<Integer> climbingleaderboard(List<Integer> ranked,List<Integer> player) {
// Write your code here
List<Integer> ranking = ranked.stream().distinct().collect
(Collectors.toList());
List<Integer> place = new ArrayList<Integer>();
for(int i = 0; i < player.size(); i++){
ranking.add(player.get(i));
Collections.sort(ranking);
Collections.reverse(ranking);
place.add(ranking.indexOf(player.get(i))+1);
ranking.remove(player.get(i));
}
return place;
}
}
解决方法
排序ranking
一次,当它被定义时,并使用Collections.binarySearch
找到player
的合适位置。
List<Integer> ranking = new ArrayList<>(new TreeSet<>(ranked)); // sorts and deduplicates
List<Integer> place =
player.stream()
.map(player -> {
int index = Collections.binarySearch(ranking,player);
if (index < 0) { index = ~index; }
return index + 1;
})
.toList();
return place;
,
它可能不会有太大的不同,但尝试同时使用
Collections.sort(ranking,Collections.reverseOrder());
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。