Lintcode_18 Subsets II

来源:互联网 发布:java 退出程序 编辑:程序博客网 时间:2024/06/10 01:08

Given a list of numbers that may has duplicate numbers, return all possible subsets

Example

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

[  [2],  [1],  [1,2,2],  [2,2],  [1,2],  []]
不多说了直接上代码:

class Solution {public:    /**     * @param S: A set of numbers.     * @return: A list of lists. All valid subsets.     */    vector<vector<int> > subsetsWithDup(const vector<int> &S) {        // write your code here        vector<int> temp;        vector<vector<int>> res = {temp};        vector<int> s = S;        sort(s.begin(), s.end());        bfs(s, res);        return res;    }        void bfs(vector<int>& s, vector<vector<int>>& res) {         queue<pair<vector<int>, int>> que;         for (int i = 0; i < s.size(); i++) {             vector<int>:: iterator itr_low = lower_bound(s.begin() + i, s.end(), s[i]);             vector<int>:: iterator itr_up = upper_bound(s.begin() + i, s.end(), s[i]);             int ind = itr_up - s.begin();             vector<int> temp;             for (int j = 0; j < itr_up - itr_low; j++) {                 temp.push_back(s[i]);                 que.push(make_pair(temp, ind));             }             i = ind - 1;         }         while (!que.empty()) {             vector<int> target = que.front().first;             int ind = que.front().second;             res.push_back(target);             que.pop();             if (ind < s.size()) {                 for (int i = ind; i < s.size(); i++) {                     vector<int> temp = target;                     vector<int>:: iterator itr_low = lower_bound(s.begin() + i, s.end(), s[i]);                     vector<int>:: iterator itr_up = upper_bound(s.begin() + i, s.end(), s[i]);                     int ind_1 = itr_up - s.begin();                     for (int j = 0; j < itr_up - itr_low; j++) {                            temp.push_back(s[i]);                            que.push(make_pair(temp, ind_1));                     }                     i = ind_1 - 1;                 }             }         }    }};


0 0
原创粉丝点击