NC406. 最长山脉
描述
示例1
输入:
[2,5,2,1,5]
输出:
4
说明:
[2,5,2,1]示例2
输入:
[2,2,2,2,1]
输出:
0
说明:
没有山脉则输出 0C++ 解法, 执行用时: 20ms, 内存消耗: 3012KB, 提交时间: 2022-07-11
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int longestmountain(vector<int>& nums) { // write code here int n=nums.size(); vector<int> l(n); vector<int> r(n); for(int i=1;i<n;++i){ if(nums[i]>nums[i-1]){ l[i]=l[i-1]+1; } } for(int i=n-2;i>=0;--i){ if(nums[i]>nums[i+1]){ r[i]=r[i+1]+1; } } int res=0; for(int i=0;i<n;++i){ if(l[i]>0&&r[i]>0&&res<l[i]+r[i]+1){ res=l[i]+r[i]+1; } } return res; } };
C++ 解法, 执行用时: 20ms, 内存消耗: 3140KB, 提交时间: 2022-04-26
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int longestmountain(vector<int>& nums) { int i,sz=nums.size(),res=0; if(sz>=3) { vector<int> left(sz-2),right(sz-2); left[0]=(nums[0]<nums[1])?1:0; right[sz-3]=(nums[sz-1]<nums[sz-2])?1:0; for(i=1;i<sz-2;i++) { left[i]=(nums[i]<nums[i+1])?(left[i-1]+1):0; right[sz-i-3]=(nums[sz-i-1]<nums[sz-i-2])?(right[sz-i-2]+1):0; } for(i=0;(i<sz-2)&&(res<sz-1);i++) { if((left[i]>0)&&(right[i]>0)) res=(res>=(left[i]+right[i]))?res:(left[i]+right[i]); } if(res>0) res++; } return res; } };
C 解法, 执行用时: 21ms, 内存消耗: 2884KB, 提交时间: 2022-08-02
int longestmountain(int* nums, int numsLen ) { int z = 0; for(int i = 1; i < numsLen -1; i++) { int a = 1; for(int j = i - 1; j > -1; j--) { if(nums[j] >= nums[j + 1]) { break; } a++; } for(int k = i + 1; k < numsLen; k++) { if(nums[k] >= nums[k - 1]) { break; } a++; } if(a > z) { z= a; } } if(z > 2) { return z; } return 0; }
C++ 解法, 执行用时: 21ms, 内存消耗: 2992KB, 提交时间: 2022-06-14
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int longestmountain(vector<int>& nums) { // write code here int size = nums.size(); int res = 0; vector<int> left(size); for(int i = 1; i < size; ++i){ if(nums[i-1] < nums[i]){ left[i] = left[i-1]+1; } } vector<int> right(size); for(int i = size-2; i >=0; --i){ if(nums[i+1] < nums[i]){ right[i] = right[i+1]+1; } } for(int i = 0; i < size; ++i){ if(left[i] > 0 && right[i] > 0){ res = max(right[i]+left[i]+1, res); } } return res; } };
C++ 解法, 执行用时: 21ms, 内存消耗: 2992KB, 提交时间: 2022-04-28
class Solution { public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * * @param nums int整型vector * @return int整型 */ int longestmountain(vector<int>& nums) { // write code here int n=nums.size(); vector<int>r(n); vector<int>l(n); l[0]=0; r[n-1]=0; for(int i=1;i<n;i++){ if(nums[i]>nums[i-1]){ l[i]=l[i-1]+1; } } for(int i=n-2;i>=0;i--){ if(nums[i]>nums[i+1]){ r[i]=r[i+1]+1; } } int res=0; for(int i=0;i<n;i++){ if(l[i]>0&&r[i]>0&&res<r[i]+l[i]+1){ res=r[i]+l[i]+1; } } return res; } };