1. 程式人生 > 其它 >力扣665(java)-非遞減數列

力扣665(java)-非遞減數列

題目:

給你一個長度為 n 的整數陣列 nums ,請你判斷在 最多 改變 1 個元素的情況下,該陣列能否變成一個非遞減數列。

我們是這樣定義一個非遞減數列的: 對於陣列中任意的 i (0 <= i <= n-2),總滿足 nums[i] <= nums[i + 1]。 

示例 1:

輸入: nums = [4,2,3]
輸出: true
解釋: 你可以通過把第一個 4 變成 1 來使得它成為一個非遞減數列。
示例 2:

輸入: nums = [4,2,1]
輸出: false
解釋: 你不能在只改變一個元素的情況下將其變為非遞減數列。

提示:

n == nums.length
1 <= n <= 104
-105 <= nums[i] <= 105

來源:力扣(LeetCode)
連結:https://leetcode-cn.com/problems/non-decreasing-array
著作權歸領釦網路所有。商業轉載請聯絡官方授權,非商業轉載請註明出處。

解題思路:

1.設定一個變數count來記錄非遞增的數量,如果count > 1就表明沒有辦法只改變一個元素讓陣列變成一個非遞減的數列;

2.為了滿足題目的要求 nums[i] <= nums[i + 1],當前位置的元素的大小可能不變也可能變得和前一個位置的元素一樣大;

3.分為三種討論:

  • 如果沒有nums[i-2],則只需要把nums[i-1]變為nums[i]    ==>   nums[i-1] = nums[i];
  • 如果nums[i-2] < nums[ i] 並且nums[i-2] <= nums[i] , 只需要把前一個元素變為當前元素  ==>  nums[i-1] = nums[i];
  • 如果nums[i] < nums[i-1] 並且nums[i] < nums[i-1] ,只需要把當前元素變為前一個元素   ==>    nums[i] = nums[i-1]
例如:
[4,2,5]  把4調成2
[1,4,2,5] 把4換成2
[1,4,1,3] 把4換成1
[3,4,2,5] 把2換成4

程式碼:

 或者: