將兩個公升序鍊錶合併為乙個新的 公升序 鍊錶並返回。新煉表是通過拼接給定的兩個鍊錶的所有節點組成的。
輸入:1->2->4, 1->3->4輸出:1->1->2->3->4->4
class
solution
l2->next=
mergetwolists
(l1,l2-
>next)
;return l2;}}
;
class
solution
else
tmp=tmp-
>next;}if
(l1) tmp-
>next=l1;
if(l2) tmp-
>next=l2;
return res-
>next;}}
;
數字 n 代表生成括號的對數,請你設計乙個函式,用於能夠生成所有可能的並且 有效的 括號組合。
輸入:n = 3輸出:[
「((()))」,
「(()())」,
「(())()」,
「()(())」,
「()()()」
]
分析 括號匹配問題的兩個準則1 在任意字首中 做括號的數目嚴格大於右括號
2 左括號數目和有哦括號數目相同
class
solution
} vector
generateparenthesis
(int n)
};
給你乙個鍊錶陣列,每個鍊錶都已經按公升序排列。請你將所有鍊錶合併到乙個公升序鍊錶中,返回合併後的鍊錶。
輸入:lists = [[1,4,5],[1,3,4],[2,6]]輸出:[1,1,2,3,4,4,5,6]
解釋:鍊錶陣列如下:
[1->4->5,
1->3->4,
2->6
]將它們合併到乙個有序鍊錶中得到。
1->1->2->3->4->4->5->6
演算法描述 使用小根堆來維護所有煉表頭節點中的最小值 將他插入結果鍊錶即可冷知識: 此處需要自定義比較函式 就寫乙個cmp結構體 過載() 然後由於是小根堆 就是a->val>b->val了
class
solution};
listnode*
mergeklists
(vector>
& lists)
return dummy-
>next;}}
;
給定乙個鍊錶,兩兩交換其中相鄰的節點,並返回交換後的鍊錶。你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。
給定 1->2->3->4, 你應該返回 2->1->4->3.
class
solution
};
class
solution
return dummy-
>next;}}
;
給你乙個鍊錶,每 k 個節點一組進行翻轉,請你返回翻轉後的鍊錶。k 是乙個正整數,它的值小於或等於鍊錶的長度。
如果節點總數不是 k 的整數倍,那麼請將最後剩餘的節點保持原有順序。
給你這個鍊錶:1->2->3->4->5當 k = 2 時,應當返回: 2->1->4->3->5
當 k = 3 時,應當返回: 3->2->1->4->5
演算法描述: 先判斷是否存在k個節點 然後翻轉這k個節點 然後處理好頭和尾
class
solution
//處理頭和尾
auto c=p-
>next;
//c是反轉之後的k個節點的最後乙個節點 翻轉之前的第乙個節點
p->next=a,c-
>next=b;
//因為結束前面的k個節點的翻轉之後 a指向翻轉之後的k個節點的第乙個節點 也是翻轉之前的最後乙個節點 b指向下一組的第乙個節點
p=c;
}return dummy-
>next;}}
;
氣泡排序究極奧義
原理 兩個for迴圈,外層for迴圈控制比較輪數 趟數 內層for迴圈比較每一輪中的前後兩項 次數 內層for迴圈每比較一輪就產生乙個當前迴圈的最大值 由於個別陣列本身的排列的特殊性 導致根本不需要將所有的趟數都排列完才可以 如下陣列 只需要排列一次即可 var arr 2,1,3,4,5,6,7,...
KMP演算法 究極版
翁振宇 字串匹配 kmp演算法 演算法實現一 字串匹配的關鍵在於減少匹配次數。而kmp演算法的核心思想就是匹配陣列,根據匹配陣列的值來排程匹配字串的索引減少多餘的排程。匹配陣列就是字串具有的相同字首 字尾的最大值。比如對於字串 ababacbbb 有 ta baba cbbb 0next 10 01...
究極卡常神技
return x x p pchar buf 1 22 out 1 22 p1 buf,p2 buf ll p3 1,ff 0 define getchar p1 p2 p2 p1 buf fread buf,1,1 21,stdin p1 p2 eof p1 inline void flush i...