以《查找热点数据问题》为例,发现AI 刷题的优势之处 | 豆包MarsCode AI 刷题

96 阅读4分钟

这篇文章,我将以这题为例来展示AI刷题的优势。

问题描述

给你一个整数数组 nums 和一个整数 k,请你用一个字符串返回其中出现频率前 k 高的元素。请按升序排列。

时间复杂度必须优于 O(n log n),其中 n 是数组大小。

返回一个包含 k 个元素的字符串,数字元素之间用逗号分隔。数字元素按升序排列,表示出现频率最高的 k 个元素。

我们先自己来分析一下这道题

(1)我们首先需要统计每个元素在数组 nums 中出现的频率。可以使用哈希表来实现,元素作为键,频率作为值。

(2)维护前 k 个高频元素,可以使用一个小顶堆(优先队列)来维护频率最高的前 k 个元素。每次新元素加入时,如果堆的大小超过 k,则移除堆顶元素(即频率最小的元素)。堆的复杂度是 O(log k)。

(3)在获取到前 k 个高频元素后,我们需要对这些元素进行排序。由于 k 是远小于 n 的,因此直接排序的时间复杂度可以认为是 O(k log k)。

(4)将排序后的元素转换为字符串,按升序排列,元素之间用逗号分隔。

我们使用MarsCode AI来分析一下这个题目

询问Marscode AI

屏幕截图 2024-11-07 104525.png

可以看到豆包MarsCode AI的思路挺清晰,带领我们开始读题,将左侧的题目完整的输出了出来

屏幕截图 2024-11-07 104600.png

接着上面的回答,豆包MarsCode AI分析了解题思路,清晰地写出每一步会用到什么数据结构,并且它也考虑到了题目中限制时间复杂度

屏幕截图 2024-11-07 104614.png

豆包MarsCode AI将步骤也一并给了出来

可以发现与我们自己分析的步骤几乎相同

我们也可以让豆包MarsCode AI给出一个代码的示例,在我使用的过程中,我发现豆包MarsCode AI可以读取你写的代码,当你没有写任何代码时,它会按照之前分析的解题思路来做题

屏幕截图 2024-11-07 110655.png

但是当你已经写了代码,豆包MarsCode AI将会读取你已经写了的代码,对你的代码提出修改建议,并按照之前分析的思路,给我们一点提示,并给出修改后的代码示例。

屏幕截图 2024-11-07 111015.png

屏幕截图 2024-11-07 111349.png

这对于做题时遇到错误的朋友们太友好了,在我们做题没有头绪时,豆包MarsCode AI直接将我们的思路继续下去,同时,在给我们的代码中也有详细的注释,可以让我们更加清楚修改了什么。

我们尝试运行下豆包MarsCode AI给出的代码

屏幕截图 2024-11-07 132304.png

代码正确。

我们在写完代码之后,我们还可以让豆包MarsCode AI将C++代码转为其他语言的代码

屏幕截图 2024-11-07 132617.png

部分代码:

使用哈希表统计每个元素的频率

        Map<Integer, Integer> freqMap = new HashMap<>();
        for (int num : nums) {
            freqMap.put(num, freqMap.getOrDefault(num, 0) + 1);
        }

使用最小堆维护频率最高的 k 个元素

        PriorityQueue<Map.Entry<Integer, Integer>> minHeap = new PriorityQueue<>(
            (a, b) -> a.getValue() - b.getValue()
        );

        for (Map.Entry<Integer, Integer> entry : freqMap.entrySet()) {
            minHeap.offer(entry);
            if (minHeap.size() > k) {
                minHeap.poll();
            }
        }

从堆中取出 k 个元素,按升序排列

        List<Integer> topKFrequent = new ArrayList<>();
        while (!minHeap.isEmpty()) {
            topKFrequent.add(minHeap.poll().getKey());
        }

        Collections.sort(topKFrequent);

因为判题系统暂时只支持Java与python语言,转换无疑方便了我们的提交,提交下,我们成功通过了本题。

总结下

我们使用豆包MarsCode AI 来刷算法题可以大大提升我们的学习效率提高学习效果。

在上面例题的实践,我们可以看到豆包MarsCode AI 不仅能提供即时的反馈、个性化学习和高质量解析,还能帮助我们快速掌握解决算法问题的思路、方法和技巧

同时,使用豆包MarsCode AI来进行语言的互相转换,也可以方便我们的做题,不用拘泥于语言的限制,将重点回归到思路上。

接下来我还会继续使用豆包MarsCode AI来辅助我的学习。

我的解析到这里就结束了,我在这里也期待一下豆包MarsCode AI未来的发展。