https://leetcode-cn.com/problems/construct-target-array-with-multiple-sums/
这道题一开始想了个办法,但是错了,错在假设其他数字都是不变的,一直向一个数字加,直到凑到其中一个目标最小数字。。。
看了题解才知道,这道题是可以逆操作的。因为是其他所有数字加到一个数字上,所以最大的数字肯定是刚操作的数字。只要反操作一下。
值得注意的是需要优化,不然会超时,一个最大的数字,假设是a+other_sum,如果a还是最大的数字(通过a大于other_sum来判断,如果大于other_sum,肯定大于其他数字),那么a还是可以再拆,a=b+other_sum,所以综合起来,max_num= c + k*other_sum,,其中c>=1,是一个整数,所以我们可以直接减去k*other_sum,相当于逆操作的多次。至于怎么求k,我们注意到c是一个正数,c>=1 && c < other_sum,所以k*other_sum这部分最大是 max_num-1,然后用(max_num-1)/other_sum,这里减一是因为如果max_num整除other_sum,那新的数字就是0了。
class Solution {
public:
bool isPo