22.括號(hào)生成
給出n代表生成括號(hào)的對(duì)數(shù),請(qǐng)你寫(xiě)出一個(gè)函數(shù)卫旱,使其能夠生成所有可能的并且有效的括號(hào)組合人灼。
例如,給出n?=?3顾翼,生成結(jié)果為:
[
? "((()))",
? "(()())",
? "(())()",
? "()(())",
? "()()()"
]
超時(shí)程序(結(jié)果是正確的)
功能:
超時(shí)程序 Part 1:將返回的多維字符list轉(zhuǎn)換為一維字符串list投放,并將字符串list輸出
超時(shí)程序 Part 2:采用遞歸調(diào)用的方式,輸入初始list,輸出需要得到的list
超時(shí)程序 Part 3:網(wǎng)上的程序适贸,主要功能將多維降為一維list
需要注意的是:
正確的程序
此通過(guò)的程序和上一個(gè)程序大體是一樣的灸芳,但是在加括號(hào)的過(guò)程中(addParenthesis()里)涝桅,就開(kāi)始剪枝了,將list中沒(méi)有的項(xiàng)進(jìn)行append(),若已經(jīng)擁有的項(xiàng)耗绿,則跳過(guò)而執(zhí)行其他的程序苹支。
(本來(lái)程序做出來(lái)是超時(shí)的,沒(méi)準(zhǔn)備今天能夠做完误阻,吃完晚飯后想了想:可以直接先剪枝,動(dòng)態(tài)規(guī)劃中避免重復(fù)子序列就是用這個(gè)方法剪枝的晴埂。于是跑完步后修改了下究反,驚喜出現(xiàn)了,當(dāng)我再次執(zhí)行儒洛,通過(guò)了)精耐,但是這個(gè)方法的時(shí)間復(fù)雜度太高了。應(yīng)該是可以排在通過(guò)人中的最后一名了琅锻。
看了條形圖卦停,別人的執(zhí)行時(shí)間差不多否在50左右,自己卻差不多需要用差不多一秒恼蓬,慚愧啊惊完。不過(guò)好歹通過(guò)了,之后再想有沒(méi)有別的辦法進(jìn)行優(yōu)化处硬。降低時(shí)間復(fù)雜度小槐。
3. 無(wú)重復(fù)字符的最長(zhǎng)子串
給定一個(gè)字符串,找出不含有重復(fù)字符的最長(zhǎng)子串的長(zhǎng)度荷辕。
示例:
給定"abcabcbb"凿跳,沒(méi)有重復(fù)字符的最長(zhǎng)子串是"abc",那么長(zhǎng)度就是3疮方。
給定"bbbbb"控嗜,最長(zhǎng)的子串就是"b",長(zhǎng)度是1骡显。
給定"pwwkew"疆栏,最長(zhǎng)子串是"wke",長(zhǎng)度是3蟆盐。請(qǐng)注意答案必須是一個(gè)子串承边,"pwke"是子序列??而不是子串。
超時(shí)程序
正確的程序(雙指針?lè)ǎ?/h4>
26. 刪除排序數(shù)組中的重復(fù)項(xiàng)
給定一個(gè)排序數(shù)組石挂,你需要在原地刪除重復(fù)出現(xiàn)的元素博助,使得每個(gè)元素只出現(xiàn)一次,返回移除后數(shù)組的新長(zhǎng)度痹愚。
不要使用額外的數(shù)組空間富岳,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成蛔糯。
示例?1:
給定數(shù)組nums=[1,1,2], 函數(shù)應(yīng)該返回新的長(zhǎng)度2, 并且原數(shù)組nums 的前兩個(gè)元素被修改為1,2。 你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素窖式。
示例?2:
給定 nums =[0,0,1,1,1,2,2,3,3,4],函數(shù)應(yīng)該返回新的長(zhǎng)度5, 并且原數(shù)組nums 的前五個(gè)元素被修改為0,1,2,3,4蚁飒。你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。
說(shuō)明:
為什么返回?cái)?shù)值是整數(shù)萝喘,但輸出的答案是數(shù)組呢?
請(qǐng)注意淮逻,輸入數(shù)組是以“引用”方式傳遞的,這意味著在函數(shù)里修改輸入數(shù)組對(duì)于調(diào)用者是可見(jiàn)的阁簸。
你可以想象內(nèi)部操作如下:
//nums是以“引用”方式傳遞的爬早。也就是說(shuō),不對(duì)實(shí)參做任何拷貝int len = removeDuplicates(nums);// 在函數(shù)里修改輸入數(shù)組對(duì)于調(diào)用者是可見(jiàn)的启妹。// 根據(jù)你的函數(shù)返回的長(zhǎng)度, 它會(huì)打印出數(shù)組中該長(zhǎng)度范圍內(nèi)的所有元素筛严。for (int i = 0; i < len; i++) {? ? print(nums[i]);}