Leetcode每日一练--43
3349. 检测相邻递增子数组 I
难度:简单
提示
给你一个由 n 个整数组成的数组 nums 和一个整数 k,请你确定是否存在 两个 相邻 且长度为 k 的 严格递增 子数组。具体来说,需要检查是否存在从下标 a 和 b (a < b) 开始的 两个 子数组,并满足下述全部条件:
- 这两个子数组
nums[a..a + k - 1]和nums[b..b + k - 1]都是 严格递增 的。 - 这两个子数组必须是 相邻的,即
b = a + k。
如果可以找到这样的 两个 子数组,请返回 true;否则返回 false。
子数组 是数组中的一个连续 非空 的元素序列。
示例 1:
输入:nums = [2,5,7,8,9,2,3,4,3,1], k = 3
输出:true
解释:
- 从下标
2开始的子数组为[7, 8, 9],它是严格递增的。 - 从下标
5开始的子数组为[2, 3, 4],它也是严格递增的。 - 两个子数组是相邻的,因此结果为
true。
示例 2:
输入:nums = [1,2,3,4,4,4,4,5,6,7], k = 5
输出:false
提示:
2 <= nums.length <= 1001 <= 2 * k <= nums.length-1000 <= nums[i] <= 1000
代码
bool hasIncreasingSubarrays(int* nums, int numsSize, int k) {// 遍历所有可能的起始位置 afor (int a = 0; a <= numsSize - 2 * k; a++) {int valid1 = 1; // 标记第一个子数组是否严格递增int valid2 = 1; // 标记第二个子数组是否严格递增// 检查第一个子数组 [a, a+k-1]for (int i = a; i < a + k - 1; i++) {if (nums[i] >= nums[i+1]) {valid1 = 0;break;}}// 检查第二个子数组 [a+k, a+2*k-1]for (int i = a + k; i < a + 2 * k - 1; i++) {if (nums[i] >= nums[i+1]) {valid2 = 0;break;}}// 若两个子数组均严格递增,返回 trueif (valid1 && valid2) {return true;}}return false;
}
