LeetCode 665. Non-decreasing Array

原题链接在这里: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 }

跟上Make Array Non-decreasing or Non-increasing.

posted @ 2017-09-20 12:56  Dylan_Java_NYC  阅读(430)  评论(0编辑  收藏  举报