3349. Adjacent Increasing Subarrays Detection I

Leetcode link

题目简介

/**
 * @param {number[]} nums
 * @param {number} k
 * @return {boolean}
 */

本题给我们一个数组 nums 以及一个数字 k,要求我们在 nums 中找出两个长度为 k 的递增数组(不能有相同数字的递增)

如果能找到就返回 true,否则返回 false

解题思路

既然题目要求是找出两个,那么我们可以用两个变量 prevSubStrLencurSubStrLen 来分别代表上一个递增数组的长度,以及当前递增数组的长度

如果当前递增数组的长度到达 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
};

results matching ""

    No results matching ""