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; } };