重生之我在豆包刷题QAQ

又到了金九银十的毕业季,突然发现豆包还不错,还能刷题,于是试了一试…

跳转:没想到ai还能刷题

问题描述

# 问题描述

给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。你可以按任意顺序返回答案。

- 1 <= nums.length <= 10^5
- k 的取值范围是 [1, 数组中不相同的元素的个数]
- 题目数据保证答案唯一,换句话说,数组中前 k 个高频元素的集合是唯一的

你所设计算法的时间复杂度必须优于 O(n log n) ,其中 n 是数组大小。

**示例 1**

输入: nums = [1,1,1,2,2,3], k = 2

输出: [1,2]

**示例 2**

输入: nums = [1], k = 1

输出: [1]

热点数据解题思路

没想到还能帮你优化QAQ
帮忙检查代码
ai问答

我的解法

import java.util.*;

public class Main {
    public static String solution(int[] nums, int k) {
        List<Integer> list = new ArrayList<>();
        // 先统计次数
        Map<Integer, Integer> map = new HashMap<>();
        for (int num : nums) {
            Integer i = map.get(num);
            if (Objects.isNull(i)) {
                map.put(num, 1);
            } else {
                map.put(num, i + 1);
            }
        }
        //存储次数对应的num
        int[] bucket = new int[nums.length + 1];
        map.forEach((key, value) -> {
            bucket[value] = key;
        });
        for (int i = bucket.length - 1; i > 0; i--) {
            if (bucket[i] != 0 && k > 0) {
                list.add(bucket[i]);
                k--;
                if (k == 0) {
                    break;
                }
            }
        }
        return Arrays.toString(list.toArray());
    }

    public static void main(String[] args) {
        //  You can add more test cases here
        int[] nums1 = {1, 1, 1, 2, 2, 3};
        int[] nums2 = {1};

        System.out.println(solution(nums1, 2));
        System.out.println(solution(nums2, 1));
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值