1239. 串聯(lián)字符串的最大長度
核心思想:遞歸,選或者不選,定義dfs(i,pre)表示從i-n的滿足要求的arr中選擇字符串串聯(lián)所能獲得的最大長度為dfs(i,pre),pre表示已經(jīng)選過的字符串所組成的集合。然后就有兩種情況選,或者不選,選的話需要保證mask[i]和pre沒有公共字母,dfs(i+1,pre|mask[i]),不選的話dfs(i+1,pre)。這里判斷是否有公共字母利用了位運(yùn)算,用二進(jìn)制數(shù)來表示一個字符串,比如abc就等于111,c就等于100,然后1表示含這個字母,這里有一個誤區(qū)就是arr不用處理,不容易想到,如果arr中的單詞已經(jīng)有相同字母了,那么我們就把它從arr中刪除=不添加到masks,masks想到于剔除不滿足要求的字符串后每個字符串的二進(jìn)制數(shù)。統(tǒng)計(jì)答案的時候只需要把1的個數(shù)統(tǒng)計(jì)出來即可。
2826. 將三個組排序
核心思想:問題轉(zhuǎn)換,問你nums的最長遞增子序列是多長,然后用n-最長遞增子序列即可,有點(diǎn)技巧性不太容易想到,這里求最長遞增子序列我們用的是g[i]表示長度為i+1的遞增子序列的最后一個元素的最小值為g[i],也可以用動態(tài)規(guī)劃來求最長遞增子序列。
2563. 統(tǒng)計(jì)公平數(shù)對的數(shù)目
核心思想:枚舉,對于一個數(shù)對來說誰作為i,誰作為j都行,因?yàn)橹灰鼈儾皇峭粋€數(shù)i<j的,所以我們可以對nums進(jìn)行排序,這是這題的核心。然后對lower <= nums[i] + nums[j] <= upper進(jìn)行變形,lower-nums[j] <= nums[i]<= upper-nums[j],我們通過枚舉nums[j]然后看前面有多少個nums[i]滿足這個范圍要求即可,然后我們可以統(tǒng)計(jì)r:<= upper-nums[j]的個數(shù),以及小于l:lower-nums[j]的個數(shù),然后r-l就是滿足要求的個數(shù),由于nums是排好序的,所以統(tǒng)計(jì)個數(shù)可以用二分法來實(shí)現(xiàn),這里就不再討論二分的邊界問題了。
文章來源:http://www.zghlxwxcb.cn/news/detail-680549.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-680549.html
到了這里,關(guān)于1239. 串聯(lián)字符串的最大長度;2826. 將三個組排序;2563. 統(tǒng)計(jì)公平數(shù)對的數(shù)目的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!