我不知道如何在最少发生的地图中获取值。
问题:
编写一个方法rarest,它接受一个映射,其键是字符串,其值是整数作为参数,并返回在映射中出现最少次数的整数值。如果存在平局,则返回较小的整数值。如果地图为空,则抛出异常。
例如,假设地图包含来自学生姓名的映射 (字符串)到他们的年龄(整数)。你的方法将返回最少 经常发生的年龄。考虑包含的映射变量m 以下键/值对:
{Alyssa = 22,Char = 25,Dan = 25,Jeff = 20,Kasey = 20,Kim = 20,Mogran = 25, Ryan = 25,Stef = 22}三个人20岁(Jeff,Kasey和Kim),两个 人们年龄22岁(Alyssa和Stef),四个人年龄25岁(Char, Dan,Mogran和Ryan)。因此,rarest(m)的调用仅返回22 两个人都是那个年龄。
如果有平局(两个或更多的拉雷斯年龄 发生的次数相同),返回最年轻的年龄 他们。例如,如果我们在地图上添加另一对Kelly = 22 以上,现在将有三个20岁的人(杰夫, Kasey,Kim)和三个22岁的人(Alyssa,Kelly,Stef)。那么一个 rarest(m)的召唤现在将返回20,因为20是较小的 最稀有的价值观。
现在我相信这段代码给了我最小的int数,但是我如何得到这个值呢?
public static int rarest (Map<String, Integer> map) {
List<Integer> list = new ArrayList<Integer>();
for(Integer i: map.values()) {
list.add(i);
}
int min = 0, count = 0;
for(Integer i: list) {
count = Collections.frequency(list, i);
if(count < min) {
min = count;
}
}
return min;
}
答案 0 :(得分:1)
跟踪i
的值,该值对应于最低计数min
。这应该看起来很熟悉:
public static int rarest (Map<String, Integer> map) {
List<Integer> list = new ArrayList<Integer>();
for(Integer i: map.values()) {
list.add(i);
}
int min = Integer.MAX_VALUE, rarestValue = 0;
for(Integer i: list) {
int count = Collections.frequency(list, i);
if(count < min || (count == min && i < rarestValue)) {
min = count;
rarestValue = i;
}
}
return rarestValue;
}
答案 1 :(得分:0)
这样做,
public static int rarest (Map<String, Integer> map) {
List<Integer> list = new ArrayList<>(map.values());
Collections.sort(list); // you need to sort the list first
int min = list.get(0); // this is your bug, min shouldn't start at 0
int count = 0, rarest = 0;
for(Integer i: list) {
count = Collections.frequency(list, i);
if(count < min) {
min = count;
rarest = i;
}
}
return rarest;
}