Leetcode精选50题-Day14

215 数组中的第K个最大元素

1. 题目描述

在这里插入图片描述

2. 思路&代码

排序总结,写的特好:xiao-xie-shui-bu-xing

# 堆排序的思想

#可借助python中的heapq模块实现堆的功能, 注意建立的是小根堆
class Solution1:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        import heapq as hq
        heap = []
        for i in nums:
            hq.heappush(heap, i)

            if len(heap) > k:
                hq.heappop(heap)
        return heap[0]
      
# 自己实现堆
class Solution2:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        n = len(nums)
        heap = nums[:k]
        # 建立含k个元素的小根堆
        for i in range((k-2)//2, -1, -1):
            self.sift(heap, i, k-1)

        #若k之后的元素大于根节点,则将该元素与根节点替换,然后做一次调整
        for j in range(k,n):
            if nums[j] > heap[0]: #找前k大的数
                heap[0] = nums[j]
                self.sift(heap, 0 , k-1)
        # print(heap)
        return heap[0] #堆顶就是第k大的数了

    # 注意这里要建立小根堆
    def sift(self, alist, low, high):
        # 假设只有根节点需要调整,两棵子树都是堆
        i = low
        j = i *2 +1 #j指向i的左子树
        tmp = alist[i]
        while j <=high:
            if j+1<= high and alist[j] > alist[j+1]: #右子树比较小,则指向右子树
                j = j+1
            if alist[j] < tmp:  # 若子树的值比较小,则根节点换成子树,然后向下看一层
                alist[i] = alist[j]
                i = j
                j = i *2 +1
            else:
                alist[i] = tmp # 子树的值大于根节点,则根节点就放在这一层
                break
        else:
            alist[i] = tmp # j越界跳出循环,则把根节点放在叶子节点

217 存在重复元素

1. 题目描述

在这里插入图片描述

2. 思路&代码

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        temp = set(nums)
        if len(temp) == len(nums):
            return False
        else:
            return True

230 二叉搜索树中第K小的元素

1. 题目描述

在这里插入图片描述

2. 思路&代码

class Solution:
    def kthSmallest(self, root, k):
        """
        :type root: TreeNode
        :type k: int
        :rtype: int
        """
        def inorder(r):
            return inorder(r.left) + [r.val] + inorder(r.right) if r else []
    
        return inorder(root)[k - 1]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
牙科就诊管理系统利用当下成熟完善的SSM框架,使用跨平台的可开发大型商业网站的Java语言,以及最受欢迎的RDBMS应用软件之一的Mysql数据库进行程序开发。实现了用户在线查看数据。管理员管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等功能。牙科就诊管理系统的开发据操作人员需要设计的界面简洁美观,在功能模块布局上跟同类型网站保持一致,程序在实现基本要求功能时,也为数据信息面临的安全问提供了一些实用的解决方案。可以说该程序在帮助管理者高效率地处理工作事务的同时,也实现了数据信息的整体化,规范化与自动化。 管理员在后台主要管理病例管理、字典管理、公告管理、药单管理、药品管理、药品收藏管理、药品评价管理、药品订单管理、牙医管理、牙医收藏管理、牙医评价管理、牙医挂号管理、用户管理、管理员管理等。 牙医列表页面,此页面提供给管理员的功能有:查看牙医、新增牙医、修改牙医、删除牙医等。公告信息管理页面提供的功能操作有:新增公告,修改公告,删除公告操作。公告类型管理页面显示所有公告类型,在此页面既可以让管理员添加新的公告信息类型,也能对已有的公告类型信息执行编辑更新,失效的公告类型信息也能让管理员快速删除。药品管理页面,此页面提供给管理员的功能有:新增药品,修改药品,删除药品。药品类型管理页面,此页面提供给管理员的功能有:新增药品类型,修改药品类型,删除药品类型。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值