力扣每日一题:692.前K个高频单词 Python双解,包教包会!

简介: 力扣每日一题:692.前K个高频单词 Python双解,包教包会!

692.前K个高频单词


难度:中等


题目:

给一非空的单词列表,返回前 k 个出现次数最多的单词。

返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率,按字母顺序排序。

注意:

  • 假定 k 总为有效值, 1 ≤ k ≤ 集合元素数。
  • 输入的单词均由小写字母组成。


示例:

示例 1:
输入: ["i", "love", "leetcode", "i", "love", "coding"], k = 2
输出: ["i", "love"]
解析: "i" 和 "love" 为出现次数最多的两个单词,均为2次。
    注意,按字母顺序 "i" 在 "love" 之前。
示例 2:
输入: ["the", "day", "is", "sunny", "the", "the", "the", "sunny", "is", "is"], k = 4
输出: ["the", "is", "sunny", "day"]
解析: "the", "is", "sunny" 和 "day" 是出现次数最多的四个单词,
    出现次数依次为 4, 3, 2 和 1 次。


分析:

这道题相信大家第一时间都能想到将单词列表转化为哈希计数表,但困难的就是如何针对该哈希表进行排序。

这里介绍两种方法,各有所长,供大家参考:

  1. 如果大家之前做过 179.最大数
    那么相信你一定对cmp_to_key这个方法不会陌生,它对于Python3提供了sorted过程中的两两比较功能。
    我们只需要单独创建一个函数,针对字典K进行函数式排序即可。
  2. 如果我们不了解cmp_to_key,那么这道题怎么解?老老实实用嵌套列表。
    我们将Counter统计好的字典,按照k,v的形式添加进一个列表,然后在对列表排序的时候,对数字与字符串进行分别排序即可。


解题1: cmp_to_key

from collections import Counter
from functools import cmp_to_key
class Solution:
    def topKFrequent(self, words, k):
        d = Counter(words)
        def cmp(a, b):
            if d[a] > d[b]:
                return -1
            elif d[a] == d[b]:
                return -1 if sorted([a, b])[0] == a else 1
            else:
                return 1
        return sorted(d.keys(), key=cmp_to_key(cmp))[:k]


解题2: 列表切片

from collections import Counter
class Solution:
    def topKFrequent(self, words, k: int):
        d = Counter(words)
        tmp = []
        for word, num in d.items():
            tmp.append((num, word))
        ret = sorted(tmp, key=lambda x: (-x[0], x[1]))
        return [i[1] for i in ret[:k]]




相关文章
|
6天前
|
Python 人工智能 数据可视化
Python模块与包(八)
Python模块与包(八)
19 0
Python模块与包(八)
|
6天前
|
Python
python中导入模块/包的几种方式
python中导入模块/包的几种方式
26 0
|
6天前
|
存储 自然语言处理 数据挖掘
Python:计算字符串中每个单词出现的次数
Python:计算字符串中每个单词出现的次数
|
3天前
|
关系型数据库 Java 分布式数据库
实时计算 Flink版操作报错合集之在使用 Python UDF 时遇到 requests 包的导入问题,提示 OpenSSL 版本不兼容如何解决
在使用实时计算Flink版过程中,可能会遇到各种错误,了解这些错误的原因及解决方法对于高效排错至关重要。针对具体问题,查看Flink的日志是关键,它们通常会提供更详细的错误信息和堆栈跟踪,有助于定位问题。此外,Flink社区文档和官方论坛也是寻求帮助的好去处。以下是一些常见的操作报错及其可能的原因与解决策略。
19 5
|
6天前
|
Python Windows
Python分发包安装pip3
Python分发包安装pip3
9 0
|
6天前
|
Python
【Python操作基础】——包
【Python操作基础】——包
|
6天前
|
Python
在Python中快捷引入缺失包的技巧和实践
在Python中快捷引入缺失包的技巧和实践
13 0
|
6天前
|
域名解析 JSON API
Python小工具包
【5月更文挑战第2天】构建了一个Python小工具包,包含获取IP、域名解析、JSON格式化和时间戳转换的函数。通过`get_ip_address`和`resolve_domain`实现网络任务,`format_json`用于美化JSON数据,`timestamp_to_datetime`转换时间戳。这些函数可提高开发效率,易于整合到项目中,展现Python的简洁和灵活性。
38 1
Python小工具包
|
6天前
|
网络协议 算法 网络架构
Python网络编程之udp编程、黏包以及解决方案、tcpserver
Python网络编程之udp编程、黏包以及解决方案、tcpserver
|
6天前
|
Python
【Python笔记】pip intall -e命令:让你的工程直接使用开源包的源码,可断点调试,修改源码!
【Python笔记】pip intall -e命令:让你的工程直接使用开源包的源码,可断点调试,修改源码!
20 0