这是她 发表于 2020-5-26 20:52:19

C++打开LeetCode的大门——1144(数组)

本帖最后由 这是她 于 2020-5-26 20:51 编辑

                                                                              递减元素使数组呈锯齿状
题目:
给你一个整数数组 nums,每次操作会从中选择一个元素并将该元素的值减少 1。
如果符合下列情况之一,则数组 A 就是 锯齿数组:

* 每个偶数索引对应的元素都大于相邻的元素,即 A > A < A > A < A > ...
* 或者,每个奇数索引对应的元素都大于相邻的元素,即 A < A > A < A > A < ...

返回将数组 nums 转换为锯齿数组所需的最小操作次数。

示例1:
输入:nums =
输出:2
解释:我们可以把 2 递减到 0,或把 3 递减到 1。
示例2:
输入:nums =
输出:4
提示:
1 <= nums.length <= 1000
1 <= nums <= 1000
代码:
#include <iostream>
#include <vector>

#define INT_MAX 2147483647
#define INT_MIN (-INT_MAX - 1)

using namespace std;

class Solution {
public:
    int movesToMakeZigzag(vector<int>& nums) {
            //先判断数组的个数---如果小于2就直接返回0
      if (nums.size() < 2) return 0;
      //s1s2 ->记录奇偶的的次数
      int s1 = 0;
      int s2 = 0;
      //N->数组大小
      int N = nums.size();
      
      for (int i = 0; i < N; ++i) {
                //l->i-1
                //s->i+1
            int l = (i > 0) ? nums : INT_MAX;
            int r = (i < N - 1) ? nums : INT_MAX;
            //i&1
            //1---i->奇数
            //0---i->偶数
            if (i & 1) {
                s1 += max(0, nums - min(l, r) + 1);
            } else {
                s2 += max(0, nums - min(l, r) + 1);
            }
      }
      return min(s1, s2);
    }
};

int main()
{
      int p[] = {6,4,7,5};
      vector<int> nums1 = {p, p+sizeof(p) / sizeof(p)};

      Solution s1;
      int a = s1.movesToMakeZigzag(nums1);
      
      cout << a << endl;
      
      return 0;
}
https://leetcode-cn.com/problems ... e-by-da-li-wang-15/



来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems ... o-make-array-zigzag
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

页: [1]
查看完整版本: C++打开LeetCode的大门——1144(数组)