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 }

 

转载于:https://www.cnblogs.com/Dylan-Java-NYC/p/7560870.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值