算法刷题Day1

BM47 寻找第k大

第一天就随便记录吧,万事开头难,我好不容易开的头,就别难为自己,去追求高质量了。嘿嘿嘿
题目 传送门

解题思路一:维护一个大小为k的最小堆。最后返回堆顶元素。

代码:

python 复制代码
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param a int整型一维数组
# @param n int整型
# @param K int整型
# @return int整型
#
from heapq import heappushpop
from typing import List


#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param a int整型一维数组
# @param n int整型
# @param K int整型
# @return int整型
#
from heapq import heappushpop
from typing import List


class Solution:
    def findKth(self , a: List[int], n: int, K: int) -> int:
        # write code here
        # 维护一个大小为k的最小堆。最后返回堆顶元素
        import heapq
        heap = []
        # 将前k个数压进数组
        for i in range(K):
            heapq.heappush(heap, a[i])
        print(f"heap = {heap}")
        for i in range(K,n):
            # 取堆顶元素,如果堆顶元素小,poppush,如果堆顶元素一样,push。如果堆顶元素大,pass
            heap_top = heap[0]
            print(f"{a[i], heap_top}")
            if a[i] > heap_top:
                heapq.heappop(heap)
                heapq.heappush(heap,a[i])
            elif a[i] == heap_top:
                heapq.heappush(heap,a[i])
            else:
                pass
        print(heap)
        return heap[-K]
so = Solution()
a,n,K = [10,10,9,9,8,7,5,6,4,3,4,2],12,3
print(so.findKth(a,n,K)) 

解题思路二:二分查找,这个思路很值得学习
思路二 原帖传送门

等我实现实现

相关推荐
饼干,1 分钟前
第5天python内容
开发语言·python
ZhengEnCi12 分钟前
P3E-Python Lambda表达式完全指南-什么是匿名函数?为什么90%程序员都在用?怎么快速掌握函数式编程利器?
后端·python
Einsail14 分钟前
贪心算法,优先队列(大小根堆使用)
算法·贪心算法
小欣加油14 分钟前
leetcode 474 一和零
c++·算法·leetcode·职场和发展·动态规划
Ace_317508877619 分钟前
京东商品详情接口深度解析:从反爬绕过到数据结构化重构
数据结构·python·重构
尤利乌斯.X21 分钟前
在Java中调用MATLAB函数的完整流程:从打包-jar-到服务器部署
java·服务器·python·matlab·ci/cd·jar·个人开发
听风吟丶21 分钟前
Java 9 + 模块化系统实战:从 Jar 地狱到模块解耦的架构升级
开发语言·python·pycharm
love530love29 分钟前
【笔记】xFormers版本与PyTorch、CUDA对应关系及正确安装方法详解
人工智能·pytorch·windows·笔记·python·深度学习·xformers
2301_7644413330 分钟前
Streamlit搭建内网视频通话系统
python·https·音视频
伟大的大威41 分钟前
LLM + TFLite 搭建离线中文语音指令 NLU并部署到 Android 设备端
python·ai·nlu