假设我们有一串字符(比如它们的值在0--255
范围内,对于 ASCII 和范围0--65,535
)。
以下是可能应用的任务列表:
index
; 以下是一个示例,索引 i 从 0到17
aabbaaaacccddccccc
我们可以像这样在线跟踪字符串,其中括号内的整数是相应字符的索引:
我们可以使用hashmap来跟踪每个唯一字符的索引:
Map<Character, Integer> myMap = new HashMap<>(m);
myMap.put(new Character(input.charAt(j)), j);
但是当我们想要获得索引最小的字符时,我们可能会逐个浏览地图,这不如我想要的那么高效。
我们可以使用优先级队列来存储元素,这确实给了我O(1)时间来获取最小元素;但我无法像地图一样更新优先级队列。
有什么想法吗?
答案 0 :(得分:0)
除了将地图myMap从字符映射到位置之外,您还可以将SortedMap从一个位置更新为另一个字符。
对于每个字符c输入,您将:
如果要查找索引最小的元素,可以只查看SortedMap的第一个元素。使用SortedMap,这是一种有效的操作。