描述
给定一个长度为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);
}
}
代码解释:
- 定义一个longestPyramid()函数,用于计算长度最长的金字塔数组的长度。
- 判断数组长度是否小于3,如果是,则返回0。
- 定义两个指针i和j,分别从数组的开头和结尾开始遍历。
- 如果nums[i]小于nums[i+1],则i指针向右移动,直到找到递减的位置。
- 如果i等于n-2,则说明数组中没有金字塔数组,返回0。
- 如果nums[j]小于nums[j-1],则j指针向左移动,直到找到递减的位置。
- 计算金字塔数组的长度,并返回。
- 在main()函数中,调用longestPyramid()函数,并输出结果。