1.题目
2.思路
1.首先明白一点这题是求最少替换次数,所以我们可以很明确的知道这是个贪心问题。
2.然后题目要求处理后需要返回非递减顺序
的序列,所以我们从后往前贪,因为如果从前面向后面贪的话,你很难确定别的数的空间
3.因为我们让拆分后的最小值最大,给前面的数留的空间就越大
,所以我们这里让拆分后的minval最大。
4.证明如下
3.代码
class Solution {
public:
long long minimumReplacement(vector<int>& nums) {
long long ans = 0;
for (int i = nums.size() - 2; i >= 0; i--) {
if (nums[i + 1] >= nums[i]) continue;
int k=nums[i] / nums[i + 1];
if(nums[i] % nums[i + 1]==0) k--;
ans+=k;
nums[i] /= (k + 1);//最小值为均分的值,因为有k+1段
}
return ans;
}
};