less than 1 minute read

<-E 1403> Minimum Subsequence in Non-Increasing Order

// Method 1
class Solution {
public:
    vector<int> minSubsequence(vector<int>& nums) {
        int sum = accumulate(nums.begin(), nums.end(), 0);
        sort(nums.rbegin(), nums.rend());
        vector<int> res;
        int sum_res = 0;
        int i = 0;
        while (sum_res <= sum - sum_res && i < nums.size()) {
            res.push_back(nums[i]);
            sum_res += nums[i];
            i ++;
        }
        return res;
    }
    
};

// Method 2
class Solution {
public:
    vector<int> minSubsequence(vector<int>& nums) {
        int buckets[101] = {};
        int sum = 0;
        vector<int> result;
        
        for(int num : nums) {
            buckets[num]++;
            sum += num;
        }
        
        int seq_sum = 0;
        for(int i = 100; i > 0; i--) {
            while(buckets[i] > 0) {
                result.push_back(i);
                seq_sum += i;
                buckets[i]--;
                if(seq_sum > sum - seq_sum) {
                    i = -1;
                    break;
                }
            }
        }
        return result;
    }
};