一枚菜鳥的leetcode刷題筆記 - Day14
阿新 • • 發佈:2021-01-27
215 - 陣列中的第K個最大元素
在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。
class Solution:
def findKthLargest(self, nums: List[int], k: int) -> int:
nums.sort() #從小到大排列
return nums[-k]
217 - 存在重複元素
給定一個整數陣列,判斷是否存在重複元素。
如果存在一值在陣列中出現至少兩次,函式返回 true 。如果陣列中每個元素都不相同,則返回 false 。
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
nums.sort()
for i in range(1, len(nums)):
if nums[i] == nums[i-1]:
return True
return False
先排序,再看有沒有相鄰數的相等即可。
230 - 二叉搜尋樹中第K小的元素
給定一個二叉搜尋樹,編寫一個函式 kthSmallest 來查詢其中第 k 個最小的元素。
# 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 :
q = []
p = root
counter = 0
while p or q:
while p:
q.append(p)
p = p.left
p = q.pop()
counter += 1
if counter == k:
return p.val
p = p.right
二叉搜尋樹是一種節點值之間具有一定數量級次序的二叉樹,對於樹中每個節點:
- 若其左子樹存在,則其左子樹中每個節點的值都不大於該節點值;
- 若其右子樹存在,則其右子樹中每個節點的值都不小於該節點值。
若上述二叉樹中序遍歷,為:0 - 1 - 2 - 3 - 5 - 6 - 7 - 8 - 9
本解法實際上是用佇列寫dfs中的中序遍歷,需要注意的是入隊和出隊的順序。