【LeetCode每日一题】2765. 最长交替子数组

2024-1-23

文章目录

        • [2765. 最长交替子数组](https://leetcode.cn/problems/longest-alternating-subarray/)
            • 思路:

2765. 最长交替子数组

【LeetCode每日一题】2765. 最长交替子数组_第1张图片

思路:

计算给定数组中的最大交替子数组的长度。交替子数组是指相邻元素差值符号交替的子数组。代码通过两层循环遍历数组,以每个元素为起点,判断其与后续元素的差值是否交替,并记录最长的交替子数组长度。最后返回最大交替子数组的长度

  1. 初始化左右边界指针 leftright,分别指向数组的第一个元素和最后一个元素。
  2. 当左右指针未重合时,循环执行以下步骤:
    • 计算中间值索引 mid,即 (left + right) / 2
    • 如果中间值等于目标值,则直接返回中间值索引 mid
    • 如果中间值大于目标值,则将右边界指针 right 更新为 mid - 1
    • 如果中间值小于目标值,则将左边界指针 left 更新为 mid + 1
  3. 如果未找到目标值,则返回 -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;  // 返回最大交替子数组的长度
}

点击移步博客主页,欢迎光临~

偷cyk的图

你可能感兴趣的:(LeetCode,leetcode,算法,职场和发展)