更多LeetCode题解
我的解法
思路
可以很容易想到,输出True的序列一定是在一个原来有序的序列中插入了一个元素导致整个序列出现了一个逆序对,而逆序对无非两种情况。如下图:
- 删除逆序对的第一个元素,则序列有序
- 删除逆序对的第二个元素,则序列有序
因此,只要找到这个逆序对,删除第一个或第二个元素,如果删除某个元素之后序列有序则输出True,否则输出False
class Solution {
public:
bool checkPossibility(vector<int>& nums) {
if (nums.size() < 3) return true;
int unorderIndex = 0;
for (int i = 0; i < nums.size() - 1; i++) {
if (nums[i] > nums[i + 1]) {
unorderIndex = i;
break;
}
}
bool flagA = true;
bool flagB = true;
vector<int>