845. 陣列中的最長山脈
我們把陣列 a 中符合下列屬性的任意連續子陣列 b 稱為 「山脈」:
b.length >= 3
存在 0 < i < b.length - 1 使得 b[0] < b[1] < ... b[i-1] < b[i] > b[i+1] > ... > b[b.length - 1]
(注意:b 可以是 a 的任意子陣列,包括整個陣列 a。)
給出乙個整數陣列 a,返回最長 「山脈」 的長度。
如果不含有 「山脈」 則返回 0。
示例 1:
輸入:[2,1,4,7,3,2,5]
輸出:5
解釋:最長的 「山脈」 是 [1,4,7,3,2],長度為 5。
示例 2:
輸入:[2,2,2]
輸出:0
解釋:不含 「山脈」。
0 <= a.length <= 10000
0 <= a[i] <= 10000
基本思路:笨拙的方法,哎,山脈的特點是,有上山的山腳a,山頂b,以及下山的山腳c,其中a-b-c,是連續的。採用兩個flag,表示上山和下山。只有兩個都為真的時候,才為有效的山脈。
int longestmountain(vector& a)
cnt = 1;
uflag = false;
dflag = false;
continue;
} if (!uflag && !dflag)
if (a[i] < a[i - 1])
} else if (uflag && !dflag)
if (a[i] < a[i - 1])
} else if (!uflag&&dflag)
if (a[i] < a[i - 1])
cnt = 1;
} else if (uflag&&dflag)
if (a[i] > a[i - 1])
} }if (uflag&&dflag)
return maxlenth;
}
基本思路:雙向遍歷,從左到右記錄某一點為頂點,從山腳到山頂的距離,從右到左記錄該點為頂點,從山頂到山腳的距離。
int longestmountain(vector& a)
}for(int i=a.size()-2;i>=0;i--)
}int maxlegth=0;
for(int i=0;i1&&right[i]>1)
}return maxlegth;
}
基本思路:記錄山腳的起點,有點像拐點,當下坡時,記錄山脈的長度(不用每次都記錄山脈終點的位置)。
int longestmountain(vector& a)
else if(a[i]}
else
start=-1;
//cout<<"start: "<}
return maxlength;
}
845 陣列中的最長山脈
我們把陣列 a 中符合下列屬性的任意連續子陣列 b 稱為 山脈 注意 b 可以是 a 的任意子陣列,包括整個陣列 a。給出乙個整數陣列a,返回最長 山脈 的長度。如果不含有 山脈 則返回0。示例 1 輸入 2,1,4,7,3,2,5 輸出 5 解釋 最長的 山脈 是 1,4,7,3,2 長度為 5。...
845 陣列中的最長山脈
給出乙個整數陣列 a,返回最長 山脈 的長度。如果不含有 山脈 則返回 0。很容易想到暴力解法的思路,遍歷陣列,然後開始中心擴充套件,左邊需要嚴格遞減,右邊需要嚴格遞增,注意到兩邊都需要擴充套件。class solution int ans 0 for int i 1 i n 1 i 右邊擴充套件 ...
陣列中的最長山脈 845
我們把陣列 a 中符合下列屬性的任意連續子陣列 b 稱為 山脈 給出乙個整數陣列 a,返回最長 山脈 的長度。如果不含有 山脈 則返回 0。示例 1 輸入 2,1,4,7,3,2,5 輸出 5 解釋 最長的 山脈 是 1,4,7,3,2 長度為 5。示例 2 輸入 2,2,2 輸出 0 解釋 不含 ...