LeetCode-劍指Offer刷題記錄
Leetcode刷題之劍指offfer
這個部落格記錄leetcode-劍指offer中遇到問題的題目
劍指 Offer 04. 二維陣列中的查詢
在一個 n * m 的二維陣列中,每一行都按照從左到右遞增的順序排序,每一列都按照從上到下遞增的順序排序。請完成一個高效的函式,輸入這樣的一個二維陣列和一個整數,判斷陣列中是否含有該整數。
示例:
現有矩陣 matrix 如下:
[
[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]
給定 target = 5,返回 true。
給定 target = 20,返回 false。
限制:
0 <= n <= 1000
0 <= m <= 1000
class Solution:
def findNumberIn2DArray(self, matrix: List[List[int]], target: int) -> bool:
if matrix == []:
return False
row = 0
col = len(matrix[0]) - 1
n = len(matrix)
m = len(matrix[0])
while -1 < row < n and -1 < col < m:
if matrix[row][col] == target:
return True
elif matrix[row][col] > target:
col -= 1
else:
row += 1
return False
對於這樣的二維陣列,每一個數字的左邊和上邊的數字都比這個數字小。
劍指 Offer 07. 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。
例如,給出
前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:
3
/
9 20
/
15 7
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def buildTree(self, preorder: List[int], inorder: List[int]) -> TreeNode:
if inorder == []:
return None
elif len(inorder) == 1:
return TreeNode(preorder[0])
elif len(inorder) == 2:
root = TreeNode(preorder[0])
if preorder == inorder:
root.right = TreeNode(preorder[-1])
else:
root.left = TreeNode(preorder[-1])
return root
else:
root = TreeNode(preorder[0])
ind = inorder.index(preorder[0])
left_in = inorder[:ind]
right_in = inorder[ind+1:]
left_pre = preorder[1:1+len(left_in)]
right_pre = preorder[-len(right_in):]
root.left = self.buildTree(left_pre,left_in) if left_in != [] else None
root.right = self.buildTree(right_pre,right_in) if right_in != [] else None
return root
在前序遍歷中尋找左右子樹對應節點時,可以利用之前左右子樹中序遍歷節點長度生成。
相關文章
- 劍指offer刷題記錄
- 劍指Offer系列刷題筆記彙總筆記
- 刷題記錄:劍指offer+遇到的筆試題+LeetCode筆試LeetCode
- ✏️ JavaScript版 | 10大專題 | 劍指offer刷題筆記 ✏️JavaScript筆記
- 劍指offer刷題記錄_2. 二維陣列中的查詢陣列
- 劍指Offer題解合集
- PHPer也刷《劍指Offer》之連結串列PHP
- 劍指offer刷題筆記-32.從上到下列印二叉樹 進階筆記二叉樹
- 劍指offer刷題之路--1.陣列中重複的數字陣列
- 【劍指offer】讓抽象問題具體化抽象
- 「劍指offer」27道Mybatis面試題含解析MyBatis面試題
- 劍指offer-JavaScript版JavaScript
- 【劍指offer】左旋轉字串字串
- 【劍指offer】字串的排列字串
- 劍指Offer讀書筆記(持續更新中)筆記
- 《劍指offer》JAVA題解,LeetCode評測JavaLeetCode
- 劍指offer面試題(41-50)——java實現面試題Java
- GitHub#algorithm#:《劍指offer》 的50道面試題GithubGo面試題
- 劍指 offer(1) -- 陣列篇陣列
- Leetcode劍指offer(八)LeetCode
- 【劍指offer】【2】字串的空格字串
- 【劍指offer】字串轉整數字串
- 【劍指offer】字串的組合字串
- 【LeetCode刷題(簡單程度)】劍指 Offer 57. 和為s的兩個數字LeetCode
- 【Warrior刷題筆記】劍指offer 6 24 35. 三道題,讓你學會連結串列遞迴迭代輔助棧筆記遞迴
- [劍指offer] JAVA版題解(完整版)更新中。。。Java
- 劍指offer中幾道演算法題的思考演算法
- 劍指offer面試題29:順時針列印矩陣面試題矩陣
- 劍指offer面試題11 數值的整數次方面試題
- 【劍指offer】 第三題 二維陣列查詢陣列
- 劍指offer 面試題47:不用加減乘除做加法面試題
- BUU刷題記錄
- 記錄刷題日常
- 《劍指 Offer》棧實現佇列佇列
- 劍指offer解析-下(Java實現)Java
- 劍指offer解析-上(Java實現)Java
- 劍指 Offer 38. 字串的排列字串
- 劍指Offer 表示數值的字串字串