class Solution {
public:
bool hasIncreasingSubarrays(vector<int>& nums, int k) {
}
};
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 <= 100
1 <= 2 * k <= nums.length
-1000 <= nums[i] <= 1000
原站题解
java 解法, 执行用时: 2 ms, 内存消耗: 43.2 MB, 提交时间: 2024-11-13 00:20:41
class Solution { public boolean hasIncreasingSubarrays(List<Integer> nums, int k) { int ans = 0; int preCnt = 0; int cnt = 0; for (int i = 0; i < nums.size(); i++) { cnt++; if (i == nums.size() - 1 || nums.get(i) >= nums.get(i + 1)) { ans = Math.max(ans, Math.max(cnt / 2, Math.min(preCnt, cnt))); preCnt = cnt; cnt = 0; } } return ans >= k; } }
golang 解法, 执行用时: 12 ms, 内存消耗: 5.7 MB, 提交时间: 2024-11-13 00:20:16
func hasIncreasingSubarrays(nums []int, k int) bool { preCnt, cnt, ans := 0, 0, 0 for i, x := range nums { cnt++ if i == len(nums)-1 || x >= nums[i+1] { // i 是严格递增段的末尾 ans = max(ans, cnt/2, min(preCnt, cnt)) preCnt = cnt cnt = 0 } } return ans >= k }
python3 解法, 执行用时: 86 ms, 内存消耗: 16.4 MB, 提交时间: 2024-11-13 00:19:43
class Solution: def hasIncreasingSubarrays(self, nums: List[int], k: int) -> bool: ans = pre_cnt = cnt = 0 for i, x in enumerate(nums): cnt += 1 if i == len(nums) - 1 or x >= nums[i + 1]: # i 是严格递增段的末尾 ans = max(ans, cnt // 2, min(pre_cnt, cnt)) pre_cnt = cnt cnt = 0 return ans >= k