<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    小明思考

    Just a software engineer
    posts - 124, comments - 36, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    Subsets

    Posted on 2013-05-21 22:50 小明 閱讀(2123) 評論(0)  編輯  收藏 所屬分類: 數據結構和算法
    Problem

    Given a collection of integers that might contain duplicates, S, return all possible subsets.

    Note:

    • Elements in a subset must be in non-descending order.
    • The solution set must not contain duplicate subsets.

    For example,
    If S = [1,2,2], a solution is:

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

    分析:
    因為要求結果集是升序排列,所以首先我們要對數組進行排序。

    子集的長度可以從0到整個數組的長度。長度為n+1的子集可以由長度為n的子集再加上在之后的一個元素組成。

    這里我使用了三個技巧
    1。使用了一個index數組來記錄每個子集的最大索引,這樣添加新元素就很簡單。
    2。使用了兩個變量start和end來記錄上一個長度的子集在結果中的起始和終止位置。
    3。去重處理使用了一個last變量記錄前一次的值,它的初始值設為S[0]-1,這樣就保證了和數組的任何一個元素不同。

    代碼如下:
    public class Solution {
        public ArrayList<ArrayList<Integer>> subsetsWithDup(int[] S) {
            Arrays.sort(S);
            
            ArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();
            ArrayList<Integer> indexs = new ArrayList<Integer>();
            result.add(new ArrayList<Integer>());
            indexs.add(-1);
            
            int slen = S.length;
            int start=0,end=0;
            for(int len=1;len<=slen;++len){
                int e = end;
                for(int i=start;i<=end;++i){
                    ArrayList<Integer> ss = result.get(i);
                    int index = indexs.get(i).intValue();
                    int last = S[0]-1;
                    for(int j = index+1;j<slen;++j){
                        int v = S[j];
                        if(v!=last){
                            ArrayList<Integer> newss = new ArrayList<Integer>(ss);
                            newss.add(v);
                            result.add(newss);
                            indexs.add(j);
                            ++e;
                            last = v;
                        }
                    }
                }
                
                start = end+1;
                end = e;
            }
            return result;
        }
    }
    主站蜘蛛池模板: 自拍偷自拍亚洲精品被多人伦好爽| 女人毛片a级大学毛片免费| 夜色阁亚洲一区二区三区| 亚洲入口无毒网址你懂的| 国产在线jyzzjyzz免费麻豆| 精品日韩亚洲AV无码一区二区三区| a级毛片毛片免费观看久潮喷| 区三区激情福利综合中文字幕在线一区亚洲视频1 | 国产无遮挡裸体免费视频| 久久久亚洲精华液精华液精华液| 毛片a级毛片免费播放下载| 日韩亚洲国产高清免费视频| 大香人蕉免费视频75| 国产精品亚洲一区二区在线观看| 免费国产成人午夜电影| 一区二区3区免费视频| 亚洲国产精品无码一线岛国| 精品无码人妻一区二区免费蜜桃| 亚洲福利一区二区| 亚欧免费视频一区二区三区| 亚洲一本一道一区二区三区| 国产免费观看黄AV片 | 大地资源在线资源免费观看 | 久久久久久久综合日本亚洲| 日本免费大黄在线观看| 中文字幕亚洲综合久久综合| 亚洲?V无码乱码国产精品| 青柠影视在线观看免费高清| 亚洲日本国产精华液| 国产猛烈高潮尖叫视频免费| 国产精成人品日日拍夜夜免费| 亚洲小说区图片区| 免费va在线观看| 99热精品在线免费观看| 亚洲丶国产丶欧美一区二区三区| 精品亚洲一区二区三区在线观看 | 日本高清不卡中文字幕免费| 婷婷精品国产亚洲AV麻豆不片| 成人免费毛片内射美女APP| 一级做a爰全过程免费视频毛片 | 亚洲高清成人一区二区三区 |