leetcode 面試題108 解碼方法

2021-10-04 02:11:10 字數 985 閱讀 2709

2020/3/18  打卡

將乙個按照公升序排列的有序陣列,轉換為一棵高度平衡二叉搜尋樹。

本題中,乙個高度平衡二叉樹是指乙個二叉樹每個節點 的左右兩個子樹的高度差的絕對值不超過 1。

示例:給定有序陣列: [-10,-3,0,5,9],

乙個可能的答案是:[0,-3,9,-10,null,5],它可以表示下面這個高度平衡二叉搜尋樹:

0/ \

-3 9

/ /

-10 5

這裡有個思想,因為是排好序的,所以轉換到 排序二叉樹時,一定是序列的中間位置的結點作為根節點,中間位置所分開的左右部分,分別會放置到二叉搜尋樹的 左右子樹部分。
解法有點類似二分分治法吧。

(1)先找到有序序列的中間位置。

(2)按照中間位置,進行 左部分陣列 中間點 右部分陣列 的劃分。

(3)以中間點建立節點, 然後 以左部分陣列做 左子樹,並進行其深一步的 遞迴子樹構建。右部分陣列同理

class solution(object):

def sortedarraytobst(self, nums):

""":type nums: list[int]

:rtype: treenode

"""#邊界條件

if not nums:

return none

else:

# (1)步驟

mid=len(nums)/2

#(2)步驟

nums1=nums[0:mid]

nums2=nums[mid+1:len(nums)]

#(3)步驟

tn=treenode(nums[mid])

tn.left=self.sortedarraytobst(nums1)

tn.right=self.sortedarraytobst(nums2)

return tn

leetcode 面試題專題

面試題51.陣列中的逆序對 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。利用歸併排序,將陣列分成兩部分,前面一部分和後面一部分,進行歸併的時候,需要比較兩個陣列的數值大小,如果第二個陣列的值小的話,代表前乙個陣列剩下的都...

位元組面試題 leetcode

給定乙個迴圈陣列 最後乙個元素的下乙個元素是陣列的第乙個元素 輸出每個元素的下乙個更大元素。數字 x 的下乙個更大的元素是按陣列遍歷順序,這個數字之後的第乙個比它更大的數,這意味著你應該迴圈地搜尋它的下乙個更大的數。如果不存在,則輸出 1。示例 1 輸入 1,2,1 輸出 2,1,2 解釋 第乙個 ...

leetcode面試題 08 11 硬幣

硬幣。給定數量不限的硬幣,幣值為25分 10分 5分和1分,編寫 計算n分有幾種表示法。結果可能會很大,你需要將結果模上1000000007 示例1 輸入 n 5 輸出 2 解釋 有兩種方式可以湊成總金額 5 55 1 1 1 1 1 示例2 輸入 n 10 輸出 4 解釋 有四種方式可以湊成總金額...