TH8 金字塔数组

描述

给定一个长度为n的数组num,数组开始时呈现递增趋势的,到了某一点之后,数组中的值呈现递减趋势,符合这样先增后减规律的数组定义为金字塔数组,求整个num数组中找出长度最长的金字塔数组,如果金字塔数组不存在,请输出0

示例1

输入:

4,[1,2,3,1]

返回值:

4

示例2

输入:

5,[1,5,3,3,1]

返回值:

3

备注:

1<=n<=1000000,且num数组中的数 0<=num[i]<=1000000。

以下是Java代码实现:


public class Main {
    public static int longestPyramid(int[] nums) {
        int n = nums.length;
        if (n < 3) {
            return 0;
        }
        int maxLen = 0;
        int i = 0;
        while (i < n - 2 && nums[i] < nums[i + 1]) {
            i++;
        }
        if (i == n - 2) {
            return 0;
        }
        int j = n - 1;
        while (j > 0 && nums[j] < nums[j - 1]) {
            j--;
        }
        maxLen = j - i + 1;
        return maxLen;
    }

    public static void main(String[] args) {
        int[] nums1 = {1, 2, 3, 1};
        int[] nums2 = {1, 5, 3, 3, 1};
        int result1 = longestPyramid(nums1);
        int result2 = longestPyramid(nums2);
        System.out.println(result1);
        System.out.println(result2);
    }
}

代码解释:

  1. 定义一个longestPyramid()函数,用于计算长度最长的金字塔数组的长度。
  2. 判断数组长度是否小于3,如果是,则返回0。
  3. 定义两个指针i和j,分别从数组的开头和结尾开始遍历。
  4. 如果nums[i]小于nums[i+1],则i指针向右移动,直到找到递减的位置。
  5. 如果i等于n-2,则说明数组中没有金字塔数组,返回0。
  6. 如果nums[j]小于nums[j-1],则j指针向左移动,直到找到递减的位置。
  7. 计算金字塔数组的长度,并返回。
  8. 在main()函数中,调用longestPyramid()函数,并输出结果。

你可能感兴趣的:(算法,数据结构)