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]