從現在開始每天至少刷一道題。
題庫:lintcode
題目鏈結
難度:easy
演算法:分治
解題思路
採用分治的思想,先通過遞迴的方式把左右子樹各自翻轉後,再將根節點左右子樹翻轉一下。
注意:這裡說不能用遞迴。不用遞迴就徒手寫棧吧。反正遞迴也是通過棧實現
時間複雜度:o(logn)
空間複雜度:o(1)
解法
/**
* definition of treenode:
* public class treenode
* }*/public
class
solution
invertbinarytree
(root.left)
;invertbinarytree
(root.right)
; treenode tmp = root.left;
root.left = root.right;
root.right = tmp;
}}
題目鏈結
難度:medium
演算法:分治
解題思路
要判斷一棵樹是不是二叉查詢樹,先判斷其左右子樹是不是二叉查詢樹,然後判斷樹根節點是否大於左子樹的最大值,小於右子樹的最小值。因為我們需要構造乙個類來存放遞迴後的結果,該類有三個屬性:是否是二叉查詢樹,最小值,最大值。最小值和最大值用節點表示,因為要判斷null
時間複雜度:o(n)
空間複雜度:我猜是o(n),每個節點都要返回乙個結果。
解法
/**
* definition of treenode:
* public class treenode
* }*/class
result
}public
class
solution
private result partition
(treenode root)
result left =
partition
(root.left)
; result right =
partition
(root.right)
;//left subtree and right subtree are bst
//root < smallest value on the right subtree, and > largest value on the left subtreeif(
!left.isbfs ||
!right.isbfs)
if(root.left != null && root.val <= left.maxnode.val)
if(root.right != null && root.val >= right.minnode.val)
result result =
newresult
(true);
result.minnode = root.left != null? left.minnode: root;
result.maxnode = root.right != null? right.maxnode: root;
return result;
}}
Day10刷題總結
1 public class abc 3 4 將以下哪個方法插入行 3 是不合法的。b a.public float max float a,float b,float c b.public double max double c,double d c.public float max float ...
Linux打卡Day10 擴充套件許可權
linux擴充套件許可權 1 預設許可權 1 每乙個終端都擁有乙個umask屬性,來確定新建檔案 資料夾的預設許可權 2 umask使用數字許可權方式表示,如 022,注意 umask命令,檢視設定umask值,結果0002,4個數字,首個數字表示特殊許可權 3 目錄的預設許可權是 777 umas...
Day2 分治法 快速排序
十大經典演算法總結 一 思想 分治,遞迴 序位,前後位置 下標 元素的值 關鍵字,數字的大小 快速排序,效率很高。圖示說明 和具體操作一起看,那裡的一些結論直接畫在圖上了 二 具體操作 一 思路 basic,分割後的陣列左右邊界lr 下標 動的標記i,j 下標 二 思考 建立分割的這個函式,這個需要...