mirror of
https://github.com/ShusenTang/LeetCode.git
synced 2024-09-02 14:20:01 +00:00
Create 665. Non-decreasing Array.md
This commit is contained in:
parent
e15c8e15a7
commit
534bcb7dfb
32
665. Non-decreasing Array.md
Normal file
32
665. Non-decreasing Array.md
Normal file
@ -0,0 +1,32 @@
|
|||||||
|
# [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],如数组0,1,2,【1】,3... 中 3 > 2,此时i+1及之前的元素满足题意条件,若后面是有序的则返回true;
|
||||||
|
* 否则,如数组0,1,4,【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;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
```
|
Loading…
Reference in New Issue
Block a user