关于给出前K个重复元素频率最高的元素的一道题目,不知道是哪里逻辑出现了错误,以及为什么不能写成 //为什么不可以写成 topRank[i++]=val;而要分步骤写把topRank[i]=val;i=i++;这样写就可以了
```java
public int[] topKFrequent(int[] nums, int k) {
//用hashmap存储数据:
HashMap<Integer,Integer> map=new HashMap<>();
for (int num : nums) {
if(!map.containsKey(num))
map.put(num,1);
int value=map.get(num)+1;
map.put(num,value);
}
//以下代码复习了一下entrySet的用法:
//通过val值去找key值---不好找
//于是可以通过将map里面的key和val值调转再放入reversemap中
int [] topRank=new int[k];
int i=0;
HashMap<Integer,Integer> reversemap=new HashMap<>();
Iterator<Map.Entry<Integer,Integer>> it=map.entrySet().iterator();
while (it.hasNext()){
Map.Entry<Integer,Integer> es=it.next();
int val=es.getValue();
int key= es.getKey();
reversemap.put(val,key);//调转key,val
//为什么不可以写成 topRank[i++]=val;
topRank[i]=val;//存储不同元素出现的总次数//计数值
i=i++;
}
Arrays.sort(topRank);
//关于j>topRank.length-k-1,代表我们只取后面最大的K个
for( int j=topRank.length-1;j>topRank.length-k-1;j--){
if(reversemap.containsKey(topRank[j])){
topRank[j]=reversemap.get(topRank[j]);//更新重置topRank放入
}
}
return topRank;
}
```
【以下回答由 GPT 生成】
在这段代码中,为什么在topRank[i] = val;
这行代码中,不能直接写成topRank[i++] = val;
呢?
原因是topRank
数组是用来存储不同元素出现的总次数的,而不是存储元素本身。当你使用topRank[i] = val;
赋值时,是把某个元素出现的总次数存储到了topRank
数组的索引为i
的位置上。这样,你才可以通过Arrays.sort(topRank);
对topRank
数组进行排序,然后找出前K个重复元素频率最高的元素。
如果你写成topRank[i++] = val;
,则会将val
的值直接存储到topRank
数组的索引为i
的位置上,而不是存储元素出现的总次数。这样,就会导致topRank
数组中存储的不再是元素出现的总次数,无法正确排序和找出前K个重复元素频率最高的元素。
因此,为了保证topRank
数组正确存储元素出现的总次数,需要分步骤写成topRank[i] = val; i++;
的形式。
你确定你没有说反吗👀👀