算法刷题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)) 

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

等我实现实现

相关推荐
地平线开发者4 小时前
SparseDrive 模型导出与性能优化实战
算法·自动驾驶
董董灿是个攻城狮4 小时前
大模型连载2:初步认识 tokenizer 的过程
算法
地平线开发者5 小时前
地平线 VP 接口工程实践(一):hbVPRoiResize 接口功能、使用约束与典型问题总结
算法·自动驾驶
罗西的思考5 小时前
AI Agent框架探秘:拆解 OpenHands(10)--- Runtime
人工智能·算法·机器学习
孟健7 小时前
Karpathy 用 200 行纯 Python 从零实现 GPT:代码逐行解析
python
HXhlx8 小时前
CART决策树基本原理
算法·机器学习
码路飞9 小时前
写了个 AI 聊天页面,被 5 种流式格式折腾了一整天 😭
javascript·python
Wect9 小时前
LeetCode 210. 课程表 II 题解:Kahn算法+DFS 双解法精讲
前端·算法·typescript
颜酱10 小时前
单调队列:滑动窗口极值问题的最优解(通用模板版)
javascript·后端·算法
曲幽11 小时前
FastAPI压力测试实战:Locust模拟真实用户并发及优化建议
python·fastapi·web·locust·asyncio·test·uvicorn·workers