刷題打卡 day10 分治法

2021-10-14 16:40:02 字數 1774 閱讀 1540

從現在開始每天至少刷一道題。

題庫: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 下標 二 思考 建立分割的這個函式,這個需要...