1354. 多次求和构造目标数组

倒推

每次选最大的,然后减去剩余的所有值的和,即为按题意的操作,该位置上次的值

但倒退的话不用在意值的顺序,所以每次排一下序,选最大的即可

显然[1,1,1000000000] 类似于这样的可能超时,所以不用减,用%

当然如果只有两个值,且其中一个为1,因为任何数%1都为0,所以直接返回true就行

也要注意如果剩余值的和大于等于 当前最大值,则返回false

class Solution {
public:

    bool isPossible(vector<int>& target) {
        long long sum = 0;
        int len = target.size();
        if(len == 1)
            if(target[0] == 1) return true;
            else return false;
        if(len )
        for(int i = 0; i < len; i++)
            sum += target[i];
        sort(target.begin(), target.end());
        while(target[len - 1] > 1)
        {
            
            if(target[len - 1] == target[len - 2]) return false;
            if(len == 2 && target[len - 2] == 1) return true;
            sum -= target[len - 1];
            if(sum >= target[len - 1]) return false;
            target[len - 1] %= sum;
            if(target[len - 1] == 0) return false;
            sum += target[len - 1];
            sort(target.begin(), target.end());
        }
        int cnt = 0;
        for(int i = 0; i < len; i++)
            if(target[i] != 1) return false;
        return true;



    }
};
原文地址:https://www.cnblogs.com/WTSRUVF/p/15530989.html