开始分析nums序列中至多只能有一个前面元素大于后面元素,否则就不是通过排序后的序列轮转得到。

class Solution {
public:
    bool check(vector<int>& nums) {
        int greater_cnt = 0;
        for(int i = 0;i < nums.size();i++)
        {
            if(nums[i] > nums[(i+1)%nums.size()] )
            {
                if(++greater_cnt > 1)
                    return false;
            }
        }
        
        return true;
    }
};

这道题提供了一种思路,比较最后一个元素和第一个元素。最开始我得实现代码里只是正向考虑,没有利用取余比较最后一个元素和第一个元素,Wrong answer code:

class Solution {
public:
    bool check(vector<int>& nums) {
        int n = nums.size(),cnt = 0;
        if(n <= 2) return true;
    
        for(int i = 0;i < nums.size() - 2;i++)
        {
            if(nums[i] > nums[i+1]) cnt++;
            if(cnt > 1) return false;
            
            if(nums[i] > nums[i+1] && nums[i] < nums[i+2])
                return false;
        }
        
        return true;
    }
};

失败情况:

97 / 105 test cases passed.
Status: Wrong Answer
Submitted: 16 minutes ago
Input:
[3,1,2,2,4]
Output:
true
Expected:
false

上面的代码只判断了从左向右关系序列中当前数值不可能介于后面两个数之间,但是却无法判断处于最后一个元素场景。