兩道有趣的演算法題(只有思路)
阿新 • • 發佈:2019-02-15
1、一條長l的筆直的街道上有n個路燈,若這條街的起點為0,終點為l,第i個路燈座標為ai,每盞燈可以覆蓋到的最遠距離為d,為了照明需求,所有燈的燈光必須覆蓋整條街,但是為了省電,要是這個d最小,請找到這個最小的d。(網易)
思路:看上去很複雜的題目,其實真的超級簡單。取max{a1,l-an,t}。a1為最左邊的燈到起點的距離,l-an為最右邊的燈到終點的距離,t為相鄰兩燈的距離排序後的最大值的一半。稍微思考一下就知道原因了。
2、給定一個長度為N的陣列,找出一個最長的單調自增子序列(不一定連續,但是順序不能亂) 。(完美世界)
思路:設一個輔助陣列用來記錄以對應元素結尾的最大遞增子序列的長度(即lis[i]表示以array[i]結尾的最大遞增子序列長度為lis[i]),從頭到尾掃一遍原陣列,對於每個元素,以其結尾的最大遞增子序列長度要麼為1,要麼為這個元素前面的元素中小於該元素且最大遞增子序列長度最大的那個元素對應的最大遞增子序列長度+1。即if(array[i]>array[j] && lis[j]+1>lis[i]) {
lis[i] = lis[j] + 1; }
(這道題還有優化的方案,我只以我的思路來講。。。)
以上~~