1. 程式人生 > 其它 >一枚菜鳥的leetcode刷題筆記 - Day14

一枚菜鳥的leetcode刷題筆記 - Day14

技術標籤:leetcode二叉樹資料結構leetcode

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 個最小的元素。

說明:你可以假設 k 總是有效的,1 ≤ 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中的中序遍歷,需要注意的是入隊和出隊的順序。