LeetCode/solutions/665. Non-decreasing Array.md

33 lines
1.3 KiB
Markdown
Raw Normal View History

2018-09-12 13:49:08 +00:00
# [665. Non-decreasing Array](https://leetcode.com/problems/non-decreasing-array/description/)
# 思路
题目的意思就是在允许最多修改数组的一个元素的条件下,这个数组是否是有序的。
考虑从前往后遍历数组将遇到不满足有序条件的元素nums[i]即nums[i] < nums[i-1], 若i为size-1即最后一个元素或者数组已经全部有序直接返回true否则应考虑nums[i+1]的大小
* 若nums[i+1] >= nums[i-1]如数组012【1】3... 中 3 > 2此时i+1及之前的元素满足题意条件若后面是有序的则返回true
* 否则如数组014【1】3...中 3 < 4则若将nums[i-1]改成nums[i]再从i-2开始遍历数组判断其是否有序的即可
时间复杂度O(n), 空间复杂度O(1)
# C++
```
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
int i;
for(i = 1; i < nums.size(); i++){
if(nums[i] < nums[i-1]) break;
}
if(i >= nums.size() - 1) return true;
if(nums[i + 1] >= nums[i - 1]) i++;
else {
nums[i - 1] = nums[i];
i = max(0, i-2);
}
for(; i < nums.size() - 1; i++) // 判断后面是否有序
if(nums[i] > nums[i + 1]) return false;
return true;
}
};
```