2024-1-23
计算给定数组中的最大交替子数组的长度。交替子数组是指相邻元素差值符号交替的子数组。代码通过两层循环遍历数组,以每个元素为起点,判断其与后续元素的差值是否交替,并记录最长的交替子数组长度。最后返回最大交替子数组的长度
left
和 right
,分别指向数组的第一个元素和最后一个元素。mid
,即 (left + right) / 2
。mid
。right
更新为 mid - 1
。left
更新为 mid + 1
。public int alternatingSubarray(int[] nums) {
int ans = -1, n = nums.length; // 初始化结果 ans 为 -1,获取数组长度 n
for (int i = 0; i < n; ++i) { // 遍历数组,以每个元素为起点
int k = 1; // 设置差值的初始值为 1
int j = i; // 定义指针 j,从当前位置开始
for (; j + 1 < n && nums[j + 1] - nums[j] == k; ++j) { // 在满足条件的情况下,不断向后移动指针 j
k *= -1; // 每次循环更新差值的符号(正负交替)
}
if (j - i + 1 > 1) { // 判断当前子数组长度是否大于 1
ans = Math.max(ans, j - i + 1); // 更新结果 ans,取较大的子数组长度
}
}
return ans; // 返回最大交替子数组的长度
}