# 解题思路
贪心思路
- 计算相邻元素差值: - 对于数组 a,计算每对相邻元素的差值diff[i] = a[i+1] - a[i]。
- 如果 diff[i]为负数,意味着a[i+1]比a[i]小或相等,需要通过操作使a[i+1]变大。
 
- 对于数组 
- 确定最小操作次数: - 计算所有相邻元素中的最小差值 minDifference,即minDifference = min(diff[i])。
- 如果 minDifference为负数或零,则需要进行-minDifference + 1次操作,使得a[i+1]大于a[i],从而使数组严格递增。
 
- 计算所有相邻元素中的最小差值 
- 实现细节: - 遍历数组的每对相邻元素,找出最小的差值。
- 根据最小差值,计算出最少的操作次数。
 
#include <iostream>
#include <vector>
#include <climits>
using namespace std;
int main()
{
    int n;
    cin >> n;
    vector<int> arr(n);  // 用于存储输入数组
    vector<int> differences;  // 用于存储相邻元素的差值
    for(int i = 0; i < n; i++) {
        cin >> arr[i];
        if(i > 0) differences.push_back(arr[i] - arr[i - 1]);
    }
    int minDifference = INT_MAX;
    // 寻找最小的差值
    for(int diff : differences) {
        if(diff < minDifference) {
            minDifference = diff;
        }
    }
    // 如果最小差值是负数或零,计算所需的操作次数
    int minOperations = max(0, -minDifference + 1);
    cout << minOperations << endl;
    return 0;
}
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
关于 -minDifference + 1 为什么要 + 1 解释:
对于数组 a 中相邻的两个元素 a[i] 和 a[i+1],我们计算它们的差值 diff = a[i+1] - a[i]。
- 目标:要使 a[i] < a[i+1],需要diff > 0。
- 如果 diff < 0,说明a[i+1]比a[i]小,这时候a不是严格递增的。
- 如果 diff = 0,说明a[i+1]和a[i]相等,这时也不满足严格递增。
解释 -minDifference + 1
- 当 - minDifference < 0时:- 假设 minDifference是所有相邻差值中的最小值,并且它是一个负数。
- 例如,minDifference = -3,表示a[i+1] - a[i] = -3,也就是a[i+1]比a[i]小3。
- 要让 a[i+1] > a[i],我们至少需要使a[i+1] - a[i]从-3增加到1。因此需要增加4,即(-(-3)) + 1 = 3 + 1 = 4次操作。
 
- 假设 
- 当 - minDifference = 0时:- minDifference等于- 0,表示- a[i+1] - a[i] = 0,即- a[i+1]和- a[i]相等。
- 为了使 a[i+1] > a[i],我们至少需要进行一次操作,使得a[i+1]大于a[i]。
 
@2021-2025 代码随想录 版权所有 粤ICP备19156078号
