失败学专家诶♬ 2023-08-05 18:43 采纳率: 83.9%
浏览 1
已结题

关于#k个重复元素#的问题,如何解决?

关于给出前K个重复元素频率最高的元素的一道题目,不知道是哪里逻辑出现了错误,以及为什么不能写成 //为什么不可以写成 topRank[i++]=val;而要分步骤写把topRank[i]=val;i=i++;这样写就可以了

img

img

img


```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;
    }

```

  • 写回答

2条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-08-05 20:10
    关注

    【以下回答由 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++;的形式。


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 8月14日
  • 已采纳回答 8月6日
  • 创建了问题 8月5日

悬赏问题

  • ¥15 微信小程序 用oss下载 aliyun-oss-sdk-6.18.0.min client报错
  • ¥15 ArcGIS批量裁剪
  • ¥15 labview程序设计
  • ¥15 为什么在配置Linux系统的时候执行脚本总是出现E: Failed to fetch http:L/cn.archive.ubuntu.com
  • ¥15 Cloudreve保存用户组存储空间大小时报错
  • ¥15 伪标签为什么不能作为弱监督语义分割的结果?
  • ¥15 编一个判断一个区间范围内的数字的个位数的立方和是否等于其本身的程序在输入第1组数据后卡住了(语言-c语言)
  • ¥15 Mac版Fiddler Everywhere4.0.1提示强制更新
  • ¥15 android 集成sentry上报时报错。
  • ¥15 抖音看过的视频,缓存在哪个文件