3349. Adjacent Increasing Subarrays Detection I
题目简介
/**
* @param {number[]} nums
* @param {number} k
* @return {boolean}
*/
本题给我们一个数组 nums 以及一个数字 k,要求我们在 nums 中找出两个长度为 k 的递增数组(不能有相同数字的递增)
如果能找到就返回 true,否则返回 false
解题思路
既然题目要求是找出两个,那么我们可以用两个变量 prevSubStrLen,curSubStrLen 来分别代表上一个递增数组的长度,以及当前递增数组的长度
如果当前递增数组的长度到达 k,并且上一个递增数组的长度大于等于 k,我们就可以认为找到了符合条件的两个递增数组
计算子数组的长度我们可以从下标 1 遍历数组 nums,如果当前下标元素比上一个下标元素大,我们就把 curSubStrLen++
反之,如果比上一个下标元素小或者相等,则 prevSubStrLen = curSubStrLen,然后 curSubStrLen = 1
此外还需要注意一种情况就是单调递增子数组的长度大于 k*2,这种情况子数组本身可以被拆成两个长度为 k 的子数组,所以也是符合要求的
Javascript
/**
* @param {number[]} nums
* @param {number} k
* @return {boolean}
*/
var hasIncreasingSubarrays = function (nums, k) {
if(k === 1) {
return true
}
let prevSubStrLen = 1
let curSubStrLen = 1
for (let i = 1; i < nums.length; i++) {
if(nums[i] > nums[i - 1]) {
curSubStrLen++
} else {
prevSubStrLen = curSubStrLen
curSubStrLen = 1
}
if(curSubStrLen === k && prevSubStrLen >= k || curSubStrLen >= k*2) {
return true
}
}
return false
};