2024-1-23
文章目录
- [2765. 最长交替子数组](https://leetcode.cn/problems/longest-alternating-subarray/)
- 思路:
2765. 最长交替子数组
思路:
计算给定数组中的最大交替子数组的长度。交替子数组是指相邻元素差值符号交替的子数组。代码通过两层循环遍历数组,以每个元素为起点,判断其与后续元素的差值是否交替,并记录最长的交替子数组长度。最后返回最大交替子数组的长度
- 初始化左右边界指针
left
和right
,分别指向数组的第一个元素和最后一个元素。 - 当左右指针未重合时,循环执行以下步骤:
- 计算中间值索引
mid
,即(left + right) / 2
。 - 如果中间值等于目标值,则直接返回中间值索引
mid
。 - 如果中间值大于目标值,则将右边界指针
right
更新为mid - 1
。 - 如果中间值小于目标值,则将左边界指针
left
更新为mid + 1
。
- 计算中间值索引
- 如果未找到目标值,则返回 -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; // 返回最大交替子数组的长度
}
点击移步博客主页,欢迎光临~