leetcode 665. 非递减数列(贪心算法)
生活随笔
收集整理的這篇文章主要介紹了
leetcode 665. 非递减数列(贪心算法)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
給你一個長度為 n 的整數數組,請你判斷在 最多 改變 1 個元素的情況下,該數組能否變成一個非遞減數列。
我們是這樣定義一個非遞減數列的: 對于數組中所有的 i (0 <= i <= n-2),總滿足 nums[i] <= nums[i + 1]。
示例 1:
輸入: nums = [4,2,3]
輸出: true
解釋: 你可以通過把第一個4變成1來使得它成為一個非遞減數列
貪心的思路在于讓前面子數組的結尾元素盡量少,那么后面元素可以滿足非遞減的情況的可能性越大
代碼
class Solution {public boolean checkPossibility(int[] nums) {int n=nums.length,cnt=0;if(n==1) return true;for(int i=0;i<n-1;i++){if(nums[i+1]<nums[i])//當出現遞減時{if(++cnt>1) return false;//不滿足的位置加一if(i>0&&nums[i+1]<nums[i-1]) //num[i-1] nums[i] nums[i+1] //當出現遞減時,有兩種改變元素的方法,分別是 nums[i+1]=nums[i] 或者 nums[i]=nums[i-1] //當nums[i+1]<nums[i-1],只能將元素變為 nums[i-1] nums[i] nums[i] //當nums[i+1]>=nums[i-1],就將元素變為 nums[i-1] nums[i-1] nums[i+1] //上面的兩種序列根據 已知條件 nums[i-1]<=nums[i] 可以證明均滿足非遞減nums[i+1]=nums[i];}}return true;} }總結
以上是生活随笔為你收集整理的leetcode 665. 非递减数列(贪心算法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: spring—SpringMVC的请求和
- 下一篇: leetcode 978. 最长湍流子数