我的怀疑是因为这个问题:
https://www.hackerrank.com/challenges/migratory-birds/problem?h_r=next-挑战
我知道可以通过以下方式轻松解决:
>
启动循环
- Store the current max value & key to a,b
- If we find similar value: store the lowest key pair to b.
输入arr包含11个值,1 2 2 2 3 4 5 4 3 4
输出应该是2
说明1
不同类型的鸟类以以下频率出现:
两种类型的频率为3,其中较低的为类型2
我尝试了下面的代码,但我不知道如何工作。我使用了一个max函数,希望我会得到一个错误,因为我的示例中有两个最大值为3的值。
但是看一下我使用Collections.max时使用的迁移鸟()函数,查询返回给我的是具有最高值的最低键的映射条目。
import java.io.*;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Stream;
import static java.util.stream.Collectors.toList;
public class Solution{
// Complete the migratoryBirds function below.
static int migratoryBirds(List<Integer> arr) {
Map<Integer,Integer> map = new HashMap<>();
int temp=0;
for(int val : arr){
if(map.containsKey(val)){
temp=map.get(val);
map.put(val,temp+1);
}else{
map.put(val,1);
}
}
Map.Entry<Integer,Integer> maxEntry = Collections.max(map.entrySet(),
(e1, e2) -> e1.getValue().compareTo(e2.getValue()));
return maxEntry.getKey();
}
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(System.in));
BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(System.getenv("OUTPUT_PATH")));
int arrCount = Integer.parseInt(bufferedReader.readLine().trim());
List<Integer> arr = Stream.of(bufferedReader.readLine().replaceAll("\\s+$", "").split(" "))
.map(Integer::parseInt)
.collect(toList());
int result = migratoryBirds(arr);
bufferedWriter.write(String.valueOf(result));
bufferedWriter.newLine();
bufferedReader.close();
bufferedWriter.close();
}
}
有人能解释一下为什么我得到了预期的结果,并建议使用地图流的适当替代方法吗。
对不起,如果我的问题很奇怪,我喜欢看所有可能的方式。
将它们分组在id上创建一个地图id-
Stream.of(1, 2, 2, 2, 3, 4, 5, 5, 4, 3, 4 )
.collect(groupingBy(identity(), TreeMap::new, counting()))
.entrySet()
.stream()
.max(Map.Entry.comparingByValue())
.map(Map.Entry::getKey).get();
你可以利用的是:
int minKeyWithMaxValueEntry = map.entrySet()
.stream()
.collect(Collectors.toMap(Map.Entry::getValue, Map.Entry::getKey,
Integer::min, TreeMap::new))
.lastEntry()
.getValue();
要详细说明收集
操作:
>
它将初始地图条目中的值存储为键,相应地,条目中的每个键都转换为结果地图的值。
由于可能有多个键具有相同的值,因此合并函数会选择其中的最小值。
所有这些都存储在TreeMap
中,以确保结果Map对其键进行排序。
其中,选择最后一个条目(初始贴图中的最大值),并将最终贴图中的值存储为输出。
在这个文件数组中,我必须找到最近创建的文件。我是否必须更改日期的格式,或者函数是否可以按原样使用它?
本文向大家介绍查找MongoDB中重复的Name值的最高分?,包括了查找MongoDB中重复的Name值的最高分?的使用技巧和注意事项,需要的朋友参考一下 若要查找最大分数,请使用GROUP()将集合中的文档分组。让我们创建一个包含文档的集合- 在find()方法的帮助下显示集合中的所有文档- 这将产生以下输出- 以下是查找最大值的查询。这将计算出重复名称值的最高得分,例如“ Chris”和“ D
问题内容: 我尝试在执行以下命令后获得具有最高/最低编号的行: 这是我的测试数据 为了获得最低的价值,我将使用 现在,id是,但应该是。 我也尝试了加入: 如何根据最低的结果为每个结果获取正确的ID ? 问题答案: 我认为这是您要实现的目标: 输出: ID 价值 姓名 1个 10 第1行 4 5 第2行 在这里,我使用minVal和Name自联接了表。
我很难理解下面的代码是如何在字典中找到最大值的键的。我知道第一个参数返回键列表。但我没有得到第二个参数..帮帮我
问题内容: 我有下表: 如何在每个“班级”中找到最大“分数”的“名称”? 要求的输出: 这是针对MySQL的。 问题答案:
问题内容: 我有一些键指向相同值的哈希图。我想找到所有相等的值并打印相应的键。 这是我目前的代码: 当前代码将重复项两次添加到列表中,但是也会将每个键一次添加一次。 谢谢。 问题答案: 您可以使用流以这种方式检索重复项: 然后,您可以使用以下命令将其打印出来: