class Solution {
public:
int maxIncreasingSubarrays(vector<int>& nums) {
}
};
3350. 检测相邻递增子数组 II
给你一个由 n
个整数组成的数组 nums
,请你找出 k
的 最大值,使得存在 两个 相邻 且长度为 k
的 严格递增 子数组。具体来说,需要检查是否存在从下标 a
和 b
(a < b
) 开始的 两个 子数组,并满足下述全部条件:
nums[a..a + k - 1]
和 nums[b..b + k - 1]
都是 严格递增 的。b = a + k
。返回 k
的 最大可能 值。
子数组 是数组中的一个连续 非空 的元素序列。
示例 1:
输入:nums = [2,5,7,8,9,2,3,4,3,1]
输出:3
解释:
[7, 8, 9]
,它是严格递增的。[2, 3, 4]
,它也是严格递增的。k
值。示例 2:
输入:nums = [1,2,3,4,4,4,4,5,6,7]
输出:2
解释:
[1, 2]
,它是严格递增的。[3, 4]
,它也是严格递增的。k
值。
提示:
2 <= nums.length <= 2 * 105
-109 <= nums[i] <= 109
原站题解
cpp 解法, 执行用时: 264 ms, 内存消耗: 168.8 MB, 提交时间: 2024-11-13 00:17:25
class Solution { public: int maxIncreasingSubarrays(vector<int>& nums) { int ans = 0, pre_cnt = 0, cnt = 0; for (int i = 0; i < nums.size(); i++) { cnt++; if (i == nums.size() - 1 || nums[i] >= nums[i + 1]) { ans = max({ans, cnt / 2, min(pre_cnt, cnt)}); pre_cnt = cnt; cnt = 0; } } return ans; } };
golang 解法, 执行用时: 198 ms, 内存消耗: 14.5 MB, 提交时间: 2024-11-13 00:16:15
func maxIncreasingSubarrays(nums []int) (ans int) { preCnt, cnt := 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 }
java 解法, 执行用时: 9 ms, 内存消耗: 88.8 MB, 提交时间: 2024-11-13 00:15:47
class Solution { public int maxIncreasingSubarrays(List<Integer> nums) { Integer[] a = nums.toArray(Integer[]::new); // 转成数组处理,更快 int ans = 0; int preCnt = 0; int cnt = 0; for (int i = 0; i < a.length; i++) { cnt++; if (i == a.length - 1 || a[i] >= a[i + 1]) { ans = Math.max(ans, Math.max(cnt / 2, Math.min(preCnt, cnt))); preCnt = cnt; cnt = 0; } } return ans; } }
python3 解法, 执行用时: 1483 ms, 内存消耗: 43.9 MB, 提交时间: 2024-11-13 00:15:15
class Solution: def maxIncreasingSubarrays(self, nums: List[int]) -> int: 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