当前位置:网站首页>LeetCode703:数据流中的第 K 大元素
LeetCode703:数据流中的第 K 大元素
2022-07-21 17:45:00 【柠檬不甜会酸】
目录
一、题目
设计一个找到数据流中第 k 大元素的类(class)。注意是排序后的第 k 大元素,不是第 k 个不同的元素。
请实现 KthLargest 类:
KthLargest(int k, int[] nums) 使用整数 k 和整数流 nums 初始化对象。
int add(int val) 将 val 插入数据流 nums 后,返回当前数据流中第 k 大的元素。
二、示例
示例:
输入:
["KthLargest", "add", "add", "add", "add", "add"]
[[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]
输出:
[null, 4, 5, 5, 8, 8]解释:
KthLargest kthLargest = new KthLargest(3, [4, 5, 8, 2]);
kthLargest.add(3); // return 4
kthLargest.add(5); // return 5
kthLargest.add(10); // return 5
kthLargest.add(9); // return 8
kthLargest.add(4); // return 8
提示:
- 1 <= k <= 104
- 0 <= nums.length <= 104
- -104 <= nums[i] <= 104
- -104 <= val <= 104
- 最多调用 add 方法 104 次
- 题目数据保证,在查找第 k 大元素时,数组中至少有 k 个元素
三、思路
每次在 nums 数组后添加一个数字,便对其进行排序,再返回第 k 大的数字。
方法一用的是 sort() 函数进行排序,时间较长;
方法二用的 bisect.insort_left() 函数,该函数是 python 里的内置函数,二分法插入,在时间上有着一定优势。
四、代码
1、sort()
class KthLargest:
def __init__(self, k, nums):
"""
:param k: int
:param nums: List[int]
"""
self.k = k
self.nums = nums
def add(self, val):
"""
:param val: int
:return: int
"""
self.nums.append(val)
self.nums.sort()
return self.nums[-self.k]
# Your KthLargest object will be instantiated and called as such:
# obj = KthLargest(k, nums)
# param_1 = obj.add(val)
if __name__ == '__main__':
action = ["KthLargest", "add", "add", "add", "add", "add"]
test = [[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]
ans = [None]
k, nums = test[0][0], test[0][1]
obj = KthLargest(k, nums)
for i in range(1, len(test)):
param = obj.add(test[i][0])
ans.append(param)
print(ans)
2、bisect.insort_left()
import bisect
class KthLargest:
def __init__(self, k, nums):
"""
:param k: int
:param nums: List[int]
"""
self.k = k
nums.sort()
self.nums = nums
def add(self, val):
"""
:param val: int
:return: int
"""
bisect.insort_left(self.nums, val)
return self.nums[-self.k]
# Your KthLargest object will be instantiated and called as such:
# obj = KthLargest(k, nums)
# param_1 = obj.add(val)
if __name__ == '__main__':
action = ["KthLargest", "add", "add", "add", "add", "add"]
test = [[3, [4, 5, 8, 2]], [3], [5], [10], [9], [4]]
ans = [None]
k, nums = test[0][0], test[0][1]
obj = KthLargest(k, nums)
for i in range(1, len(test)):
param = obj.add(test[i][0])
ans.append(param)
print(ans)
边栏推荐
猜你喜欢
Rewrite dispatchtouchevent to realize the function of playing picture lock
【干货】知识共享的障碍及解决方法
Configure opencv in QT
迷你考试-考试系统
Obstacles au partage des connaissances et solutions
【OAuth2】三、OAuth2配置解读
Rk3288 detailed explanation of LVDS signal configuration and 1080p video signal
腾讯游戏 :我们如何基于 StarRocks 构建云原生数仓
管正雄:基于预训练模型、智能运维的QA生成算法落地
Hisilicon hi3531 | Ruixin micro rk1109 realizes H264 streaming with RTSP server
随机推荐
Configure opencv in QT
Single cell literature learning (Part5) -- using cell to cell variability - a new era in molecular biology
MySQL社区版下载地址
一种图片选择自定义控件
携程 Spark 多租户查询服务演进,Apache Kyuubi 未来可期
AFNetworking data-raw请求方式
编辑器公式
重写dispatchTouchEvent实现播放画面锁功能
Rewrite dispatchtouchevent to realize the function of playing picture lock
OpenGL drawing coordinate axis indicator
Writing of Samsung 6818led driver
前辈的前后台分离介绍
[compilation record of Ruixin micro rk1109_rk1126 rkmedia]
详解flex布局
自定义View——点击冒泡效果
Thinking of data storage scheme based on sub database and sub table
数据格式化小组件
Using OpenGL texture array to realize high-precision real-time LUT filter
Single cell paper record (Part18) -- spectral clustering based on learning similarity matrix
Is the computing power of human brain really weak