- 題目詳述
峯值元素是指其值大於左右相鄰值的元素。
給定一個輸入數組 nums,其中 nums[i] ≠ nums[i+1],找到峯值元素並返回其索引。
數組可能包含多個峯值,在這種情況下,返回任何一個峯值所在位置即可。
你可以假設 nums[-1] = nums[n] = -∞。
示例 1:
輸入: nums = [1,2,3,1]
輸出: 2
解釋: 3 是峯值元素,你的函數應該返回其索引 2。
示例 2:
輸入: nums = [1,2,1,3,5,6,4]
輸出: 1 或 5
解釋: 你的函數可以返回索引 1,其峯值元素爲 2;
或者返回索引 5, 其峯值元素爲 6。
二.自我探尋
思路:一看O(logn)就知道二分法
注意得到的條件不是 i,j,mid的值,而是i,j,mid所在點的趨勢
畫幾個圖後發現,只要區間的左側呈現上升,區間右側呈現下降趨勢( ,
),則必然有
代碼:public static int findPeakElement(int[] A) {
int i=0;
int j=A.length-1;
if(A[i]>A[i+1])
{
return i;
}
if(A[j]>A[j-1])
{
return j;
}
while(i<j)
{
int mid=(i+j)/2;
if(i!=0&&A[i-1]<A[i]&&A[i]>A[i+1])
{
return i;
}
if(j!=A.length-1&&A[j-1]<A[j]&&A[j]>A[j+1])
{
return j;
}
if(A[mid-1]<A[mid]&&A[mid]>A[mid+1])
{
return mid;
}
if((i==0||A[i]<A[i+1])&&A[mid]<A[mid-1])
{
j=mid-1;
}
else if((j==A.length-1||A[j]<A[j-1])&&A[mid]<A[mid+1])
{
i=mid+1;
}
else {
j=mid-1;
}
}
return 0;
}
評價:
- 網絡學習過程
思路已經是最快的了
四.Python實現