所有纠正只在转折处出现
两种情况
这种情况下把nums[i-1]改成比nums[i-2]和nums[i]之前的值即可
这种情况下把nums[i]改成nums[i-1]和nums[i+1]之间的值即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| class Solution { public: bool checkPossibility(vector<int>& nums) { int n = nums.size(); bool isCorrect = false; for(int i = 1; i < n; ++i) { if(nums[i] < nums[i - 1]) { if(isCorrect) return false; if(i == 1 || ( i >= 2 && nums[i] >= nums[i - 2])) isCorrect = true; else if(i == n - 1 || (i < n - 1 && nums[i + 1] >= nums[i - 1])) isCorrect = true; else return false; } } return true; } };
|
答案的方法,对原数组进行修改
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| class Solution { public: bool checkPossibility(vector<int>& nums) { bool isC = false; for(int i = 0, n = nums.size(); i < n - 1; ++i) { if(nums[i] > nums[i + 1]) { if(isC) return false; if(i != 0 && nums[i + 1] < nums[i - 1]) nums[i + 1] = nums[i]; isC = true; } } return true; } };
|