Every day a Leetcode
题目来源:3191. 使二进制数组全部等于 1 的最少操作次数 I
解法1:遍历
分类讨论:
- 如果 nums[i]=1,无需修改,问题变成剩下 n−i-1 个数如何操作。接下来考虑 nums[i+1]。
- 如果 nums[i]=0,修改,问题变成剩下 n−i-1 个数如何操作。接下来考虑 nums[i+1]。
所以从左到右遍历数组,一边遍历一边修改。
代码:
/*
* @lc app=leetcode.cn id=3191 lang=cpp
*
* [3191] 使二进制数组全部等于 1 的最少操作次数 I
*/
// @lc code=start
class Solution
{
public:
int minOperations(vector<int> &nums)
{
int n = nums.size();
int ans = 0;
for (int i = 0; i < n - 2; i++)
{
if (nums[i] == 0)
{
nums[i + 1] = (nums[i + 1] ? 0 : 1);
nums[i + 2] = (nums[i + 2] ? 0 : 1);
ans++;
}
}
if (nums[n - 2] == 0 || nums[n - 1] == 0)
return -1;
return ans;
}
};
// @lc code=end
结果:
复杂度分析:
时间复杂度:O(n),其中 n 是数组 nums 的长度。
空间复杂度:O(1)。