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

33 lines
1.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# [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;
}
};
```