企业网站空间购买,wordpress 输出豆瓣,东莞网络营销型网站,公司网站不用了如何注销2284. 最多单词数的发件人
给你一个聊天记录#xff0c;共包含 n 条信息。给你两个字符串数组 messages 和 senders #xff0c;其中 messages[i] 是 senders[i] 发出的一条 信息 。
一条 信息 是若干用单个空格连接的 单词 #xff0c;信息开头和结尾不会有多余空格。发件…2284. 最多单词数的发件人
给你一个聊天记录共包含 n 条信息。给你两个字符串数组 messages 和 senders 其中 messages[i] 是 senders[i] 发出的一条 信息 。
一条 信息 是若干用单个空格连接的 单词 信息开头和结尾不会有多余空格。发件人的 单词计数 是这个发件人总共发出的 单词数 。注意一个发件人可能会发出多于一条信息。
请你返回发出单词数 最多 的发件人名字。如果有多个发件人发出最多单词数请你返回 字典序 最大的名字。
注意
字典序里大写字母小于小写字母。Alice 和 alice 是不同的名字。 示例 1
输入messages [Hello userTwooo,Hi userThree,Wonderful day Alice,Nice day userThree], senders [Alice,userTwo,userThree,Alice]
输出Alice
解释Alice 总共发出了 2 3 5 个单词。
userTwo 发出了 2 个单词。
userThree 发出了 3 个单词。
由于 Alice 发出单词数最多所以我们返回 Alice 。示例 2
输入messages [How is leetcode for everyone,Leetcode is useful for practice], senders [Bob,Charlie]
输出Charlie
解释Bob 总共发出了 5 个单词。
Charlie 总共发出了 5 个单词。
由于最多单词数打平返回字典序最大的名字也就是 Charlie 。 提示
n messages.length senders.length1 n 1041 messages[i].length 1001 senders[i].length 10messages[i] 包含大写字母、小写字母和 。messages[i] 中所有单词都由 单个空格 隔开。messages[i] 不包含前导和后缀空格。senders[i] 只包含大写英文字母和小写英文字母。 思路
python有一个zip函数可以同时遍历两个数组非常方便。中规中矩的一道题。最后返回的时候的写法可以借鉴一下非常简洁。就算是二元组也能用前面一个数字来比较大小。
class Solution(object):def largestWordCount(self, messages, senders):hashmap {}for message, sender in zip(messages, senders):length len(message.split( ))if sender in hashmap:hashmap[sender] lengthelse:hashmap[sender] lengthreturn max((v, k) for k, v in hashmap.items())[1]
347. 前 K 个高频元素
给你一个整数数组 nums 和一个整数 k 请你返回其中出现频率前 k 高的元素。你可以按 任意顺序 返回答案。 示例 1:
输入: nums [1,1,1,2,2,3], k 2
输出: [1,2]示例 2:
输入: nums [1], k 1
输出: [1] 提示
1 nums.length 105k 的取值范围是 [1, 数组中不相同的元素的个数]题目数据保证答案唯一换句话说数组中前 k 个高频元素的集合是唯一的 进阶你所设计算法的时间复杂度 必须 优于 O(n log n) 其中 n 是数组大小。 解法使用了类似冒泡排序的方式来进行排序如果用堆的话估计面试的时候不会有这个API来直接调就先不管他的。做出来先。
class Solution(object):def topKFrequent(self, nums, k)::type nums: List[int]:type k: int:rtype: List[int]dict{}for i in nums:dict[i]dict.get(i,0)1lilist(dict.keys())print(li)for i in range(len(li)):for j in range(len(li)-1-i):if dict[li[j]]dict[li[j1]]:li[j],li[j1]li[j1],li[j]return li[0:k]
692. 前K个高频单词
给定一个单词列表 words 和一个整数 k 返回前 k 个出现次数最多的单词。
返回的答案应该按单词出现频率由高到低排序。如果不同的单词有相同出现频率 按字典顺序 排序。 示例 1
输入: words [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 words.length 5001 words[i] 10words[i] 由小写英文字母组成。k 的取值范围是 [1, 不同 words[i] 的数量]
进阶尝试以 O(n log k) 时间复杂度和 O(n) 空间复杂度解决。
解法与上一题类似
class Solution(object):def topKFrequent(self,words, k):cnt {}for word in words:cnt[word] cnt.get(word, 0) 1rec list(cnt.keys())for i in range(len(rec)):for j in range(len(rec)-1-i):if cnt[rec[j]]cnt[rec[j1]]:rec[j],rec[j1]rec[j1],rec[j]if cnt[rec[j]]cnt[rec[j1]] and rec[j]rec[j1]:rec[j],rec[j1]rec[j1],rec[j]return rec[0:k]