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].
给定一个包含n个数的数组,判断如果最多修改数组中的1个数字,使其变成一个非减序列。
首先找出不符合条件的数组。这样的数组有2种情况:
一,形如[4, 2, 1]的情况,连续相邻的2个数,前一个数都比后一个数大。返回false
二,形如[3, 4, 2, 3]的情况,第一个数比第三个数大,第二个数比第四个数大。返回false (需要注意i的取值情况)
遍历数组时对这两种情况进行判断即可。
class Solution { public: bool checkPossibility(vector<int>& nums) { int n = 0; for (int i = 1; i != nums.size(); i++) { if (nums[i - 1] > nums[i]) { n++; if (n == 2) return false; } if (i != 1 && i != nums.size() - 1) if (nums[i - 2] > nums[i] && nums[i - 1] > nums[i + 1]) return false; } return true; } }; // 39 ms