Subset II Leetcode 解題報告

2021-07-10 14:59:01 字數 1246 閱讀 8237

given a collection of integers that might contain duplicates, nums, return all possible subsets.

note:

elements in a subset must be innon-descendingorder.

the solution set mustnot contain duplicatesubsets.

for example,

if nums = [1,2,2], a solution is:

[ [2], [1], [1,2,2], [2,2], [1,2], ]

思路:

1、題目要求結果有序,所以先對原陣列進行排序;

2、題目還要求結果集中不能含有重複的結果,所以要進行乙個剪枝(這也是和subsets i不同的地方);

3、最主要的思路應該是dfs,我當時先想出的是遞迴遍歷,**如下:

void dfs(vector

> &result,vector

nums,vector

&temp,int i,int n)

else

if(i!=n-1)

else}}

vector

> subsetswithdup(vector

& nums)

這種方法在leetcode上跑了12ms,還有一種方法比這個要好一些,讓我們想想當前方法的缺點:對於每個結果都要遞迴到最後乙個節點,但是結果集中的大部分結果都比這個長度要短,浪費了很多時間,對於那些含有較少元素的結果,如果我們能夠及時停止遍歷就會節省很多時間,這就需要我們人為的設定好遞迴的方式,避免程式傻乎乎的遍歷到最後才知道結束。

想想這種方法:我們是不是可以把所有結果分一下類,比如所有以第乙個元素開頭的、以第二個陣列開頭的,然後一直到最後乙個元素,這種方法的實現只需要改變一下dfs的結構,**如下:

void dfs(vector

> &res,vector

&nums,vector

&temp,int k)}}

vector

> subsetswithdup(vector

& nums)

該方法在leetcode上跑8ms,比上面的那個結果要好些。

USACO Hamming Codes 解題報告

資料小,暴力搜尋可以搞定。但是推薦使用dfs,每個節點 數 有取與不取兩個分支。注意 0是必須出現的。證明如下 最終得到的結果序列中,0是必須出現的,證明如下 如果存在另乙個滿足要求的結果序列s 其最小值為a1 n 0,那麼序列s s n 是滿足條件的最小解,且首元素為0 id xpli1 prog...

USACO Closed Fences 解題報告

幾何題看著就很有畏懼感。這裡用的是最 的演算法,時間複雜度應該在n 2。還沒看別人的解題報告,不過我猜nlogn的解法是有的。比如判斷乙個fence是不是valid的時候,這裡將所有的線段兩兩比較,看是否相交。但是有個叫line sweep的演算法,可以在nlogn的時間複雜度內完成。既然accep...

Wiggle Subsequence解題報告

這道題和最長子序列,divisible subset題目類似,都可以用o n2 的時間複雜度完成。可以想象,對於第i個數,dp i dp j 1,當且僅當dp j 1 dp i 而且nums j 和nums i 的差值和j所處位置的差值符號相反。所以,如下 class solution if dp ...