LeetCode 941. 有效的山脈數(shù)組

題目

給定一個整數(shù)數(shù)組 arr,如果它是有效的山脈數(shù)組就返回 true执赡,否則返回 false镰踏。讓我們回顧一下,如果 arr 滿足下述條件沙合,那么它是一個山脈數(shù)組:

  • arr.length >= 3
  • 在 0 < i < arr.length - 1 條件下奠伪,存在 i 使得:
    • arr[0] < arr[1] < ... arr[i-1] < arr[i]
      -arr[i] > arr[i+1] > ... > arr[arr.length - 1]


例:
輸入:arr = [2,1]
輸出:false

方法一:暴力解法
  • 根據(jù)山脈數(shù)組的定義,數(shù)組長度小于三的一定不是
  • 計算數(shù)組 arr 的最大值出現(xiàn)的位置 maxIndex
  • 根據(jù)山脈數(shù)組的定義,數(shù)組元素應先進行單調遞增后進行單調遞減绊率,所以最大值位置 maxIndex 一定不位于數(shù)組的首尾含末。分別對數(shù)組首部到最大值出現(xiàn)位置 maxIndex 和最大值出現(xiàn)位置 maxIndex 到數(shù)組尾部的元素們進行判斷,是否符合單調遞增/遞減即舌,若不符合則返回 False
  • 若數(shù)組對以上條件均符合則為山脈數(shù)組
class Solution(object):
    def validMountainArray(self, arr):
        if len(arr) < 3:
            return False
        
        maxIndex = 0
        for i in range(1, len(arr)):
            if arr[i] > arr[i-1]:
                maxIndex = i
        
        if maxIndex == 0 or maxIndex == len(arr)-1:
            return False
        for i in range(maxIndex):
            if arr[i] >= arr[i+1]:
                return False
        for i in range(maxIndex, len(arr)-1):
            if arr[i] <= arr[i+1]:
                return False
        
        return True
方法二:雙指針法
  • left 表示左指針,初始值為零挎袜;right 表示右指針顽聂,初始值為數(shù)組 arr 尾部 len(arr)-1
  • left 向右移動直至找到某個值,該值大于或等于下一步移動后的值 arr[left+1]盯仪,即此時 left 指針指向山峰或多個山峰中的一個
  • right 向左移動直至找到某個值紊搪,該值大于或等于下一步移動后的值 arr[right-1],即此時 right 指針指向山峰或多個山峰中的一個
  • 判斷全景,根據(jù)山脈數(shù)組的定義耀石,若兩個指針指向同一位置,即只有一個山峰爸黄,同時 left 指針不指向數(shù)組尾部滞伟,right 指針不指向數(shù)組首部,即非單調遞增/遞減炕贵,那么為山脈數(shù)組
class Solution(object):
    def validMountainArray(self, arr):
        left, right = 0, len(arr)-1
        while left < len(arr)-1 and arr[left+1] > arr[left]:
            left += 1
        while right > 0 and arr[right-1] > arr[right]:
            right -= 1
        if left == right and left != len(arr)-1 and right != 0:
            return True
        else:
            return False
參考

代碼相關:https://programmercarl.com/0941.%E6%9C%89%E6%95%88%E7%9A%84%E5%B1%B1%E8%84%89%E6%95%B0%E7%BB%84.html

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末梆奈,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子称开,更是在濱河造成了極大的恐慌亩钟,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,039評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鳖轰,死亡現(xiàn)場離奇詭異清酥,居然都是意外死亡,警方通過查閱死者的電腦和手機蕴侣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評論 3 395
  • 文/潘曉璐 我一進店門焰轻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人昆雀,你說我怎么就攤上這事鹦马。” “怎么了忆肾?”我有些...
    開封第一講書人閱讀 165,417評論 0 356
  • 文/不壞的土叔 我叫張陵荸频,是天一觀的道長。 經(jīng)常有香客問我客冈,道長旭从,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,868評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮和悦,結果婚禮上退疫,老公的妹妹穿的比我還像新娘。我一直安慰自己鸽素,他們只是感情好褒繁,可當我...
    茶點故事閱讀 67,892評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著馍忽,像睡著了一般棒坏。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上遭笋,一...
    開封第一講書人閱讀 51,692評論 1 305
  • 那天坝冕,我揣著相機與錄音,去河邊找鬼瓦呼。 笑死喂窟,一個胖子當著我的面吹牛,可吹牛的內容都是我干的央串。 我是一名探鬼主播磨澡,決...
    沈念sama閱讀 40,416評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼质和!你這毒婦竟也來了钱贯?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,326評論 0 276
  • 序言:老撾萬榮一對情侶失蹤侦另,失蹤者是張志新(化名)和其女友劉穎秩命,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體褒傅,經(jīng)...
    沈念sama閱讀 45,782評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡弃锐,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,957評論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了殿托。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片霹菊。...
    茶點故事閱讀 40,102評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖支竹,靈堂內的尸體忽然破棺而出旋廷,到底是詐尸還是另有隱情,我是刑警寧澤礼搁,帶...
    沈念sama閱讀 35,790評論 5 346
  • 正文 年R本政府宣布饶碘,位于F島的核電站,受9級特大地震影響馒吴,放射性物質發(fā)生泄漏扎运。R本人自食惡果不足惜瑟曲,卻給世界環(huán)境...
    茶點故事閱讀 41,442評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望豪治。 院中可真熱鬧洞拨,春花似錦、人聲如沸负拟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,996評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掩浙。三九已至花吟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間涣脚,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,113評論 1 272
  • 我被黑心中介騙來泰國打工寥茫, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留遣蚀,地道東北人。 一個月前我還...
    沈念sama閱讀 48,332評論 3 373
  • 正文 我出身青樓纱耻,卻偏偏與公主長得像芭梯,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子弄喘,可洞房花燭夜當晚...
    茶點故事閱讀 45,044評論 2 355

推薦閱讀更多精彩內容