上海平台网站建设哪家有,wordpress游览器标签页,网站建设设计报告前言,网站在线优化1004. 最大连续1的个数 III 1004. 最大连续1的个数 III
题目描述#xff1a;
给定一个二进制数组 nums 和一个整数 k#xff0c;如果可以翻转最多 k 个 0 #xff0c;则返回 数组中连续 1 的最大个数 。 解题思路#xff1a; 首先题目要我们求出的最多翻转k个0后#x… 1004. 最大连续1的个数 III 1004. 最大连续1的个数 III
题目描述
给定一个二进制数组 nums 和一个整数 k如果可以翻转最多 k 个 0 则返回 数组中连续 1 的最大个数 。 解题思路 首先题目要我们求出的最多翻转k个0后可以翻转【0k】个0不一定要全翻转的连续1最多的子数组的长度 我们可以用leftright滑动窗口的思想定一个zero来记录0的个数right不断向右走当遇到nums【right】等于0时zero当zero的个数大于k的时候left先右走当遇到nums【left】等于0时zero--直到zerok,然后更新length的大小 解题代码
class Solution {
public:int longestOnes(vectorint nums, int k) {int length0;int nnums.size();int zero0;int left0,right0;while(rightn){if(nums[right]0)zero;while(zerok){if(nums[left]0)zero--;}lengthmax(length,right-left1);right;}return length;}
}; 1658. 将 x 减到 0 的最小操作数
1658. 将 x 减到 0 的最小操作数
题目描述
给你一个整数数组 nums 和一个整数 x 。每一次操作时你应当移除数组 nums 最左边或最右边的元素然后从 x 中减去该元素的值。请注意需要 修改 数组以供接下来的操作使用。
如果可以将 x 恰好 减到 0 返回 最小操作数 否则返回 -1 。 解题思路 本题是要不断从左右两边减一个数使x减为0我们可以发现左右两边减的数组是两个连续区间也就是说整个大数组被分成了三个小数组我们可以转换一下思想变为求中间数组之和等于target大数组之和-x的最长长度也就是变成了子数组问题 值得注意的是length应该初始化为-1而不是0因为当length0有两种情况 当数组为【5,6,7,8,9】而x4中间数组每个数都大于x刚好length0每个元素都要出的情况 解题代码
class Solution {
public:int minOperations(vectorint nums, int x) {int sum0;for(int i0;inums.size();i)sumnums[i];int targetsum-x;if(target0) return -1;int nnums.size();int length-1;for(int left0,right0,num0;rightn;right){numnums[right];while(numtarget)num-nums[left];if(numtarget)lengthmax(length,right-left1);}if(length-1)return length;else return n-length;}
};