1、遍历
问题的重点在于如何确定非递减数组的头在哪里。我们可以定义从第一位开始检查每一位上的数字是否都比其前一位大,若出现有一位的数字比前一位小,我们就将这一位作为有序数组的开头而不再检查下一种可能。若不出现这样的开头则说明数组本身就是非递减的,因此可以直接返回true。
而后我们检查从数组头开始的每一位是否都比其前一位大,若又有新的一位比前一位小说明数组头不止一个,故返回true。最终我们比较数组末尾是否小于等于数组首位即可。
class Solution {
public:
bool check(vector<int> &nums) {
int n = nums.size(), index = 0;
for (int i = 1; i < n; ++i) {
if (nums[i] < nums[i - 1]) {
index = i;
break;
}
}
if (index == 0) return true;
for (int i = index + 1; i < n; ++i) {
if (nums[i] < nums[i - 1]) return false;
}
return nums[n - 1] <= nums[0];
}
};