1. 程式人生 > 其它 >【DW組隊學習—LeetCode】day14

【DW組隊學習—LeetCode】day14

技術標籤:DW組隊學習LeetCodePython

215. 陣列中的第K個最大元素

在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。
【示例 1】輸入: [3,2,1,5,6,4] 和 k = 2 輸出: 5
【示例 2】輸入: [3,2,3,1,2,4,5,5,6] 和 k = 4 輸出: 4
說明:
你可以假設 k 總是有效的,且 1 ≤ k ≤ 陣列的長度。

嘗試思路:
1、排序
2、取倒數第k個數

程式碼:

class Solution:
    def findKthLargest(self, nums:
List[int], k: int) -> int: nums.sort() return nums[-k]

在這裡插入圖片描述
屬於抄近道了,寫了氣泡排序,結果超時了

程式碼:

class Solution:
    def findKthLargest(self, nums: List[int], k: int) -> int:
        for i in range(len(nums)):
            for j in range(len(nums) - i - 1):
                if nums[j] > nums[
j + 1]: a, b = nums[j], nums[j + 1] nums[j], nums[j + 1] = b, a return nums[-k]

在這裡插入圖片描述

217. 存在重複元素

給定一個整數陣列,判斷是否存在重複元素。
如果存在一值在陣列中出現至少兩次,函式返回 true 。如果陣列中每個元素都不相同,則返回 false 。
【示例 1】輸入: [1,2,3,1] 輸出: true
【示例 2】輸入: [1,2,3,4] 輸出: false
【示例 3】 輸入: [1,1,1,3,3,4,3,2,4,2] 輸出: true

嘗試思路1:
迴圈判斷當前元素是否在後面出現,若有則直接返回true,否則全部判斷完返回false

程式碼:

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        for i in range(len(nums)):
            if nums[i] in nums[i + 1:]:
                return True
        return False

【錯誤】超時
在這裡插入圖片描述
嘗試思路2:
排序後判斷是否與下一個元素相同

程式碼:

class Solution:
    def containsDuplicate(self, nums: List[int]) -> bool:
        nums.sort()
        for i in range(len(nums) - 1):
            if nums[i] == nums[i + 1]:
                return True
        return False

在這裡插入圖片描述

230. 二叉搜尋樹中第K小的元素

給定一個二叉搜尋樹,編寫一個函式 kthSmallest 來查詢其中第 k 個最小的元素。
說明: 你可以假設 k 總是有效的,1 ≤ k ≤ 二叉搜尋樹元素個數。
【示例 1】輸入: root = [3,1,4,null,2], k = 1
3
/ \
1 4
\
2
輸出: 1
【示例 2】輸入: root = [5,3,6,2,4,null,null,1], k = 3
5
/
3 6
/ \
2 4
/
1
輸出: 3
進階: 如果二叉搜尋樹經常被修改(插入/刪除操作)並且你需要頻繁地查詢第 k 小的值,你將如何優化 kthSmallest 函式?

嘗試思路:遞迴

程式碼:

# 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:
        self.l = []

        def getl(node):
            if node:
                self.l.append(node.val)
                getl(node.left)
                getl(node.right)
        getl(root)
        self.l.sort()
        return self.l[k - 1]

在這裡插入圖片描述