原创 leetcode 買賣股票 dp

309. 最佳買賣股票時機含冷凍期 dp[i][j] i是天數,j是狀態,0代表未持有股票,1代表持有股票,2代表冷凍期 -prices[i]代表買這一天的股票花的錢 class Solution { public int ma

原创 leetcode 相交鏈表 easy

題目鏈接 鏈表題基本都要用快慢指針啊,仔細一想,我把headA, headB弄一個環出來,一快一慢,在O(n)的時間內肯定能找到相交點,然而題目的意思是headA, headB已經相交了,那麼假如拿B做一個環,那麼A最後也會連接上B的開頭

原创 leetcode 旋轉鏈表 mid

題目鏈接 鏈表不能通過index來訪問,要一步步的走,所以要麻煩一些。 要注意當k大於鏈表長度時的處理,需要先遍歷一遍得到鏈表長度n,然後k對n取餘,用餘數來翻轉。 /** * Definition for singly-linke

原创 leetcode 搜索旋轉排序數組 mid

題目鏈接 看到這個O(logN)的複雜度要求,一瞬間就想到二分法。 這題說的旋轉,實際上就是左右整體互換,也就導致出現了兩個遞增序列。也就是說當我們二分查找時,有兩種可能,一種是選擇的部分一個遞增序列,而另一種可能選擇的部分橫跨兩個遞增序

原创 leetcode 三數之和 mid

題目鏈接 可以發現,我們最能想到的辦法是n*n*log(n),但有沒有辦法n*n的辦法解決呢,答案是有的: 首先我們肯定得枚舉一次List,那麼還剩下O(n)的複雜度,可以想到我們枚舉的List,a + b + c = 0 a + b =

原创 leetcode 最大子序和 easy

題目鏈接 題目鏈接 這裏提供log(n)的做法。 首先二分去找左邊的最大子序和,再找右邊的最大子序和,再找中間合起來就好了。 class Solution { public static int maxSubArray(int[

原创 leetcode 尋找兩個有序數組的中位數 hard

題目鏈接 這篇文章寫得很全面:https://www.cnblogs.com/grandyang/p/4465932.html   摘抄如下:   這道題讓我們求兩個有序數組的中位數,而且限制了時間複雜度爲O(log (m+n)),看到這

原创 關於新生VJ的使用

大力感謝fold的支持

原创 2018六校聯合周賽上學期第六場 做完其他題後才能做的題 每次貪心選取比前一個數大的數

題目鏈接 由於這篇題解寫得太好了,不做過多闡述。     因爲我們需要維護的是一段區間內的一個嚴格單調遞增的序列,考慮到其具有的單調性,我們可以考慮運用線段樹維護每一小段的最大值,並且通過最大值進行對長度的更新。     現在考慮如何在p

原创 KMP

KMP算法詳解: KMP算法之所以叫做KMP算法是因爲這個算法是由三個人共同提出來的,就取三個人名字的首字母作爲該算法的名字。其實KMP算法與BF算法的區別就在於KMP算法巧妙的消除了指針i的回溯問題,只需確定下次匹配j的位置即可,使得問

原创 2018年牛客多校算法寒假訓練營練習比賽(第二場)F.德瑪西亞萬歲 (狀壓DP

題目鏈接   題意:給你一個n*m的矩陣,0代表不可以站人,1代表可以站人,並且相鄰的格子之間不能站人(上下左右四個方向)。問有多少種站人的方法。     考慮每一行,便利每一種狀態,在當前行的基礎上,維護下一行的狀態,複雜度 o(1<<

原创 hdu 4348 To the moon 歷史的區間和

題意:n個數, m個操作 1. C l r d  給[l, r]區間的每個數加上d2. Q l r:   查詢[l, r]區間的和3. H l r t: 查詢第t個操作時[l, r]區間的和4. B t:     回到第t個操作之後  

原创 Count on a tree 樹上 (u,v)的路上的第K小的權值(主席樹+樹剖lca

題目鏈接 題目大意:  就是求在樹上 (u,v)的路上的第K小的權值 解題思路:  首先對於求第K小的問題 我們可以用主席樹搞 ,沒有問題,  但是對於一個樹形結構,我們需要將其轉化爲線性,然後需要樹剖才能做. 然後考慮鏈上的第k值怎麼維

原创 ZOJ - 2112 動態單點修改主席樹

題目鏈接 參考博客:https://www.cnblogs.com/Empress/p/4659824.html 題意:n個數,q個詢問 (n<=50000, q<=10000) Q x y z 代表詢問[x, y]區間裏的第z小的數 C

原创 2018六校聯合周賽上學期第三場 中二病也要敲代碼2 線段樹連續區間最小值

題目鏈接 其實D題是個線段樹,用線段樹維護子區間的的最小值,因爲是個環,所以說有兩種情況要考慮,一種是1 ~ n裏面的最小值就是答案的情況,第二種是sum - [1 , n]的最大值,這兩種情況就可以了。但是題目要求的是不能全取,所以我們