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 ...