Algorithm做算法題脱羡,Review點(diǎn)評(píng)英文文章找都,Tip總結(jié)技術(shù)技巧唇辨,Share做技術(shù)分享。每周打卡一次能耻,這就是ARTS打卡赏枚。
1. 做算法題
leetcode第11題. 盛最多水的容器
題目:給你 n 個(gè)非負(fù)整數(shù) a1,a2晓猛,...饿幅,an,每個(gè)數(shù)代表坐標(biāo)中的一個(gè)點(diǎn) (i, ai) 鞍帝。在坐標(biāo)內(nèi)畫 n 條垂直線诫睬,垂直線 i 的兩個(gè)端點(diǎn)分別為 (i, ai) 和 (i, 0)。找出其中的兩條線帕涌,使得它們與 x 軸共同構(gòu)成的容器可以容納最多的水摄凡。說明:你不能傾斜容器,且 n 的值至少為 2蚓曼。
圖中垂直線代表輸入數(shù)組 [1,8,6,2,5,4,8,3,7]亲澡。在此情況下,容器能夠容納水(表示為藍(lán)色部分)的最大值為 49纫版。
示例:
輸入:[1,8,6,2,5,4,8,3,7]
輸出:49
解題思路:題目是要求找到柱子(垂直線)形成的容器中最大的那個(gè)床绪,容器的容水量等于兩個(gè)柱子中最短的柱高乘以兩柱子的距離。最簡單的方法是窮舉出所有柱子形成的容器計(jì)算容水量其弊,找到最大的癞己。遍歷任意兩個(gè)柱子的時(shí)間復(fù)雜度O(n2),再找出最大的容器時(shí)間復(fù)雜度O(n)梭伐,總共時(shí)間復(fù)雜度O(n3)痹雅。沒有增加額外空間,空間復(fù)雜度O(1)糊识。這顯然是無法忍受的绩社。
有什么辦法能減少遍歷次數(shù)呢摔蓝?從容器水量計(jì)算來看,有兩個(gè)變量愉耙,兩柱最短的高度和兩柱的距離贮尉。控制一個(gè)變量朴沿,兩柱的距離猜谚。這個(gè)距離當(dāng)然越大容器水量就越大,假設(shè)初始狀態(tài)是首尾兩個(gè)柱子悯仙,距離最大龄毡,計(jì)算出水容量。再改變這個(gè)變量锡垄,左右柱子進(jìn)行移動(dòng),找到更大的水容量祭隔。怎么移動(dòng)呢货岭?將兩柱中較短的那跟移向中間,才可能是的水容量變大疾渴。因?yàn)橐苿?dòng)較長的那跟柱子的話千贯,兩柱距離縮小了,即使移動(dòng)后的柱子更高但還是受限于之前的短柱子搞坝,水容量一定是減少的搔谴。只有移動(dòng)較短的柱子才有可能找到更大的容器。這樣遍歷只需要一遍桩撮,時(shí)間復(fù)雜度O(n)敦第,空間復(fù)雜度O(1)。
解題代碼:
class Solution:
def maxArea(self, height: List[int]) -> int:
l, r, max_area = 0, len(height)-1, 0
while l < r:
max_area = max(max_area, (r - l) * min(height[l], height[r]))
if height[r] < height[l]:
r -= 1
else:
l += 1
return max_area
2.點(diǎn)評(píng)英文文章
使用logstash工具配置過程中要參考官方文檔店量,英文的技術(shù)手冊(cè)看起來雖然慢點(diǎn)芜果,但邏輯還算是比較清楚。在邏輯復(fù)雜的地方融师,給出案例右钾,這無疑是一劑良方。例如下面這段描述:
The
pattern
should match what you believe to be an indicator that the field is part of a multi-line event.The
what
must beprevious
ornext
and indicates the relation to the multi-line event.The
negate
can betrue
orfalse
(defaults tofalse
). Iftrue
, a message not matching the pattern will constitute a match of the multiline filter and thewhat
will be applied. (vice-versa is also true)
初看上去非常繞旱爆,正則舀射、前后、真假怀伦?什么東西按嘌獭!再看看下面的例子就好理解多了空镜,
Another example is to merge lines not starting with a date up to the previous line..
input { file { path => "/var/log/someapp.log" codec => multiline { # Grok pattern names are valid! :) pattern => "^%{TIMESTAMP_ISO8601} " negate => true what => "previous" } } }
This says that any line not starting with a timestamp should be merged with the previous line.
3. 技術(shù)技巧
用vmware跑Linux虛擬機(jī)是很常見的操作浩淘,那么你是如何把宿主機(jī)中的文件拷貝到虛擬機(jī)中呢捌朴?如果linux是圖形界面,直接拖拽即可张抄。但如果是命令行界面怎么辦砂蔽。可以通過優(yōu)盤掛載到Linux中署惯,實(shí)現(xiàn)文件轉(zhuǎn)移左驾,不過有些麻煩。既然虛擬機(jī)可以看作是一臺(tái)獨(dú)立的計(jì)算機(jī)极谊,網(wǎng)絡(luò)是通的就可以用xftp工具傳輸文件诡右,也可以通過xshell工具連接虛擬機(jī)。
4. 技術(shù)分享
不管是公司服務(wù)器運(yùn)維還是自搭云主機(jī)轻猖,經(jīng)常要登入看看磁盤帆吻、CPU、內(nèi)存和進(jìn)程運(yùn)行情況咙边。用logstash+shell實(shí)現(xiàn)自動(dòng)監(jiān)控并發(fā)郵件報(bào)告猜煮,具體參考我寫在github的文章。