845 陣列中的最長山脈

2021-10-25 06:32:32 字數 1528 閱讀 4980

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 解釋 不含 ...