給定一個長度為 n 的整數(shù)數(shù)組晾捏,你的任務(wù)是判斷在最多改變 1 個元素的情況下氓涣,該數(shù)組能否變成一個非遞減數(shù)列帆精。
我們是這樣定義一個非遞減數(shù)列的: 對于數(shù)組中所有的 i (1 <= i < n)贡珊,滿足 array[i] <= array[i + 1]忙厌。
思路:首先遍歷數(shù)列翩概,找到一個 array[i] > array[i + 1]的位置牲距,說明這個位置是需要改變一個元素的。關(guān)鍵在于钥庇,改變一個元素之后牍鞠,該序列是否是非遞減序列。如果想要改變array[i]评姨,那么需要保證array[i+1]>=array[i-1]难述,這樣可以把array[i]變成array[i-1],繼續(xù)向后判斷吐句。如果array[i+1]<array[i-1]龄广,那么只能改變array[i+1],將array[i+1]的值變?yōu)閍rray[i]蕴侧,繼續(xù)向后判斷择同。如果i==0,那么將array[i]改為array[i+1]的值净宵,繼續(xù)向后判斷敲才,若再次發(fā)現(xiàn)一個需要更改的值裹纳,則返回false。
重點:需要考慮到底要更改哪個位置的值這種情況紧武。