665.Non-Decreasing Array
665.Non-Decreasing Array
难度:Easy
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).
1
Example 1:
2
Input: [4,2,3]
3
Output: True
4
Explanation: You could modify the first 4 to 1 to get a non-decreasing array.
5
Example 2:
6
Input: [4,2,1]
7
Output: False
8
Explanation: You can't get a non-decreasing array by modify at most one element.
9
Note: The n belongs to [1, 10,000].
Copied!
找出第一个非递减数列的位置,将数组分为两个子数组,如果两个子数组都是有序的,则有可能通过修改一个元素来满足条件。如果子数组中并不是非递减的,则不可能通过只修改一个元素来满足非递减数组。 对于不满足条件的两个元素,分别尝试通过修改这两个元素是否能满足条件。
1
class Solution {
2
public:
3
bool checkPossibility(vector<int>& nums) {
4
if(nums.size()<3) return true;
5
int index=nums.size();
6
for(int i=1;i<nums.size();i++)
7
{
8
if(nums[i-1] >nums[i] )
9
{
10
index=i;
11
break;
12
}
13
}
14
if( index>=nums.size()-1) return true;
15
for(int i=index+1;i<nums.size();i++)
16
{
17
if(nums[i]<nums[i-1]) return false;
18
}
19
if(index ==1 ) return true;
20
//cout<<index<<endl;
21
if( nums[index-2]<=nums[index]) return true;
22
if( nums[index-1]<=nums[index+1]) return true;
23
24
return false;
25
}
26
};
Copied!
执行用时 :32 ms, 在所有 C++ 提交中击败了89.45%的用户 内存消耗 :10.3 MB, 在所有 C++ 提交中击败了84.21%的用户
Copy link