作者:
https://leetcode-cn.com/circle/discuss/0gO5RS/
class Solution {
public:
bool isPossible(vector<int>& target) {
if(target.size() == 1)
{
if(target[0] = 1)
{
return true;
}
else
{
return false;
}
}
priority_queue<int>pq;
typedef long long ll;
ll curSum = 0;
for(int i = 0; i < target.size(); i++)
{
pq.push(target[i]);
curSum += target[i];
}
while(true)
{
if(pq.top() == 1)
{
return true;
}
ll curMax = pq.top(); //当前最大
pq.pop();
if(pq.top() == 1) //当前第二大
{
if((curMax - 1)%(curSum - curMax) == 0)
{
return true;
}
else
{
return false;
}
}
else
{
ll n = (curMax - pq.top())/(curSum - curMax) + 1;
ll x = curMax - (curSum - curMax)*n;
curSum = curMax - (curSum - curMax)*(n-1);
if(x < 1)
{
return false;
}
pq.push(x);
}
}
return false;
}
};