首先想到的是回溯法,但最壞演算法複雜度為o(n^3),而且題目只需要判斷是否存在,而回溯法會把所有可能都嘗試一遍,接著想到貪心,首先找到乙個區域中的最小值a(下標記為i),接著從i+1開始找到乙個區域內的最大值b(下標記為j),從j+1開始找,尋找位於a與b之間的數,找到了,返回true,否則返回從j+1開始找下乙個區域最小,這麼做是為了保持最大的容錯性,如下:
上圖中a是區域最小,b是區域最大,設位於a之前且比a大的數為a1,則後面比a1大的數一定大於a,但是比a大的數不一定大於a1,設ab之間且比b小但比a大的數為b1,則b後面比b1要小的數一定小於b,比b要小的數卻不一定比b1要小,在這個區域中,選擇a為第乙個數,b為第二數字,可以盡可能大的獲得132模式
class solution
i=j+1;
}return false;}};
LeetCode38 報數 水題
一開始每太看懂題目 其實就是一開始是 1 然後就是對上面報數 1乙個1 11 再對上面報數 2個1 21 再對上面報數 乙個2,乙個1 1211 報數,就是將上面的數字從左到右,將個數和數字念出來。這就好辦了,建立乙個陣列就好了,每次取前面的數字 對它遍歷,計算個數。很多坑沒有注意到,粗心了 pub...
字尾陣列水水水水水水題
首先 jxrjxrjxr orz,沒有您我們都會死 然後就是我從jxr神犇那裡借鑑 照抄 過來的字尾陣列模板。include include include define cmp x y sa i x y sa i 1 x using namespace std const int n 100000...
LeetCode28 實現strStr 水題
一開始的想法是 取needle的第乙個字元開始唄,遇到合適的再比第二個。如果是找到的話,肯定是乙個個比對完了。找不到的情況就是,needle字串比haystack剩下的字串長了。能夠跳的情況.算了,還是一步步來,這個不合適就比對下乙個。比如原串1112,子串112,不好跳。要注意一些情況就行了 這裡...