演算法高階(第五天)

2021-10-08 12:37:18 字數 1983 閱讀 7220

二叉樹中,乙個節點可以往上往下走,那麼節點a總能走到b,求乙個二叉樹上的最遠距離。

演算法思路:

利用遞迴:

結果要麼是左子樹的最大距離,要麼是右子樹的最大距離,要麼是左子樹的最大深度到右子樹的最大深度

public static class returntype

}

public static returntype process(node head)

returntype left = process(head.left);

returntype right = process(head.right);

int p1 = left.maxdistance;

int p2 = right.maxdistance;

int p3 = left.h + 1 + right.h;

int maxdistance = math.max(p1,math.max(p2,p3));

int h = math.max(left.h,right.h)+1;

return new returntype(maxdistance,h);

}

有一顆多叉樹,每個節點的值代表活躍度,當根節點存在的時候,此節點的葉子節點的活躍度不能計算,當不存在時,此節點的活躍度可以被計算,求整個樹的最大活躍度。

演算法思路:

根節點來,那麼結果為葉子節點不來的情況;

根節點不來,那麼結果為葉子節點來或者不來的情況

public static class returntype

}

public static returntype process(node head)

}public returntype process(treenode root)

returntype left = process(root.left);

returntype right = process(root.right);

if(!left.isb||!right.isb)

if((left.h!=right.h)&&(math.abs(left.h-right.h)!=1))

return new returntype(math.max(left.h,right.h)+1,true);

}

lru

通過hashmap和雙向鍊錶實現

map中存的是key和node

雙向鍊錶中存的是node;

新元素進來,追加到尾部或者移動到尾部;  addnode(),movenodetotail()

public void addnode(node node)

if(head==null)

else

}

public void movenodetotail(node node)

if(head==node)

else

tail.next = node;

node.last = tail;

node.next = null;

tail = node;

}

當map的容量滿了,則刪除頭節點,刪除map的相應節點 removehead()

public node removehead()

node res = head;

if(head==tail)

else

return res;

}

put方法:

public void put(int key, int value) 

else

}}

get方法:

public int get(int key) 

return -1;

}

iOS 高階 第五天 0330

cell的一些常見屬性 再如下圖 有些美工提供的是,此時就用上backgroundview和selectedbackgroundview tableview的常見屬性 特別注意 如果要設定tableview的cell的分割線左右通欄一條線的話可以用下面這樣的設定 if tableview respo...

國慶第五天

直接在寢室待了乙個上午 一 matlab 試了一下昨天安裝的matlab2010b發現檔案都打不開,報這個錯 undefined function or method uiopen for input arguments of type char 二 c 1.找到了個之前 裡的乙個問題 把本週開頭和...

集訓第五天

今天學習了乙個快速指數冪取餘的演算法。就拿一道題來說明 description 上初中的時候我們就學會了冪乘運算,可是我們卻不知道對於高階的冪乘,出結果的方法比較慢,那麼你有什麼更好的方法嗎?input 第1行,乙個整數n 1 n 1000 表示要計算的資料組數 第2 n 1行,每行兩個整數,第1個...