原题链接在这里:https://leetcode.com/problems/non-decreasing-array/description/
题目:
Given an array with n
integers, your task is to check if it could become non-decreasing by modifying at most 1
element.
We define an array is non-decreasing if array[i] <= array[i + 1]
holds for every i
(1 <= i < n).
Example 1:
Input: [4,2,3]
Output: True
Explanation: You could modify the first 4
to 1
to get a non-decreasing array.
Example 2:
Input: [4,2,1] Output: False Explanation: You can't get a non-decreasing array by modify at most one element.
Note: The n
belongs to [1, 10,000].
题解:
从左往右读数组时,保证前面的已经保持non-decreasing. 所有尽量更改右边的数字.
当nums[i-1] > nums[i]时, 说明遇到decreasing情况, mark标记. 如果之前标记过则表明不能只改一个,所以return false.
如果之前没有标记过,则看怎么更改nums[i]. 如果nums[i-2] 也大于nums[i] 的话, 那么自然应该把nums[i]增大到nums[i-1].
否则的话就是 nums[i-2]没有nums[i]大, 则应该缩小nums[i-1]到nums[i].
Time Complexity: O(nums.length). Space: O(1).
AC Java:
1 class Solution { 2 public boolean checkPossibility(int[] nums) { 3 if(nums == null || nums.length == 0){ 4 return true; 5 } 6 7 boolean found = false; 8 for(int i = 1; i<nums.length; i++){ 9 if(nums[i] < nums[i-1]){ 10 if(found){ 11 return false; 12 } 13 14 if(i-2>=0 && nums[i]<nums[i-2]){ 15 nums[i] = nums[i-1]; 16 } 17 18 found = true; 19 } 20 } 21 22 return true; 23 } 24 }