classSolution { public: boolcheckPossibility(vector<int>& nums){ int former = -1e5, latter = 0, len = nums.size(); bool signal = 0; for (int i = 0; i < len; ++i) { latter = nums[i]; if (latter - former < 0) { if (signal) returnfalse; else { if (i + 1 < len && nums[i + 1] < former) returnfalse; else signal = 1; } } former = latter; } returntrue; } };
classSolution { public: boolcheckPossibility(vector<int>& nums){ int len = nums.size(); // When its length <= 2, it is in to be true. if (len <= 2) returntrue; bool flag = 1; for (int i = 0; i < len - 1; ++i) { // Non-increasing point detected. if (nums[i + 1] - nums[i] < 0) { // Has it happened before? // No. if (flag) { // Considering that if we change nums[i], // can num[i-1] & num[i+1] meet the need? if (i > 0 && nums[i + 1] < nums[i - 1]) returnfalse; // Assuming that num[i] is changed. We can't do it again. else flag = 0; } // Yes. elsereturnfalse; } } returntrue; } };