Leetcode 腾讯50题 day14
No.215 数组中的第K个最大元素
题目描述
在未排序的数组中找到第 k 个最大的元素。请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。
输入: [3,2,1,5,6,4] 和 k = 2
输出: 5
代码
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
class maxheap(object):
def __init__(self):
self.heap = [0]
def shiftdown(self, i):
while i*2 <= self.heap[0]:
if i*2+1>self.heap[0]:
if self.heap[i*2]>self.heap[i]:
self.heap[i*2],self.heap[i]=self.heap[i],self.heap[i*2]
else:
if self.heap[i]<self.heap[i*2] or self.heap[i]<self.heap[i*2+1]:
if self.heap[i*2]<=self.heap[i*2+1]:
self.heap[i*2+1],self.heap[i]=self.heap[i],self.heap[i*2+1]
else:
self.heap[i*2],self.heap[i]=self.heap[i],self.heap[i*2]
else:
break
i = i*2
def heapify(self, l):
self.heap[0] = len(l)
self.heap[1:] = l
for i in range(self.heap[0]//2, 0, -1):
self.shiftdown(i)
def heappop(self):
length = self.heap[0]
res = self.heap[1]
self.heap[1],self.heap[length]=self.heap[length],self.heap[1]
self.shiftdown(1)
self.heap[0] -= 1
return res
pq = maxheap()
pq.heapify(nums)
res = 0
for i in range(k):
res = pq.heappop()
print(res)
return res
No.217 存在重复元素
题目描述
给定一个整数数组,判断是否存在重复元素。
如果存在一值在数组中出现至少两次,函数返回 true 。如果数组中每个元素都不相同,则返回 false 。
输入: [1,2,3,1]
输出: true
代码
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
d = {}
for num in nums:
if num not in d:
d[num] = 1
else:
return True
return False
230. 二叉搜索树中第K小的元素
题目描述
给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。
输入: root = [5,3,6,2,4,null,null,1], k = 3
5
/ \
3 6
/ \
2 4
/
1
输出: 3
代码
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def kthSmallest(self, root: TreeNode, k: int) -> int:
l = []
def inorder(root):
if root != None:
inorder(root.left)
l.append(root.val)
inorder(root.right)
inorder(root)
return l[k-1]