Skip to main content

3349. Adjacent Increasing Subarrays Detection I

Easy
Description

Given an array nums of n integers and an integer k, determine whether there exist two adjacent subarrays of length k such that both subarrays are strictly increasing. Specifically, check if there are two subarrays starting at indices a and b (a < b), where:

  • Both subarrays nums[a..a + k - 1] and nums[b..b + k - 1] are strictly increasing.
  • The subarrays must be adjacent, meaning b = a + k. Return true if it is possible to find two such subarrays, and false otherwise.

Example 1:

Input: nums = [2,5,7,8,9,2,3,4,3,1], k = 3
Output: true
Explanation:

  • The subarray starting at index 2 is [7, 8, 9], which is strictly increasing.
  • The subarray starting at index 5 is [2, 3, 4], which is also strictly increasing.
  • These two subarrays are adjacent, so the result is true.

Example 2:

Input: nums = [1,2,3,4,4,4,4,5,6,7], k = 5
Output: false

Constraints:

  • 2 <= nums.length <= 100
  • 1 < 2 \* k <= nums.length
  • -1000 <= nums[i] <= 1000

解題思路

題目要找出是否存在符合條件的兩個 subarray:

  • 兩個 subarray 的長度皆為 k
  • 兩個 subarray 都是 strictly increasing
  • 兩個 subarray 要相鄰,中間不能有其他值

首先定義一個 helper function isIncreasing ,判斷兩個 subarray 是否都是 strictly increasing

const isIncreasing = (start) => {
for (let i = start; i < start + k - 1; i++) {
if (nums[i] >= nums[i + 1]) return false;
}
return true;
};

接著使用 isIncreasing 來判斷是否存在符合條件的兩個 subarray,兩者都嚴格遞增就回傳 true,否則回傳 false

for (let i = 0; i + 2 * k <= nums.length; i++) {
// i + 2 * k 是因為檢查的是兩個長度為 k 的相鄰 subarray
// <= nums.length 是因為最後一個 subarray 的範圍不能超過陣列長度
if (isIncreasing(i) && isIncreasing(i + k)) {
return true;
}
}
return false;

心得

使用 helper function 來簡化結構。