896.单调数列

题目:[https://leetcode-cn.com/problems/monotonic-array/description/]
思路:判定一个数组是否是单调的。单调有两种,递增和递减。表现在数列上就是后值始终比前值增加(或者减少),对于单调数列中某一段...a、b、c..始终有(a-b)*(b-c)>0。(递增同正,递进同负,即两值同号)。所以,只要不断检查a[i]-a[i+1]与前一个差值是否为同号,就能判断是否为单调,特别的,当a[i]-a[i+1]=0时,需要考虑下一组差值当情况。(0不增不减,整体单调没有影响)
需要注意当前后相等时(差值为0),

class Solution {
public:
    bool isMonotonic(vector<int>& A) {
        int front=0;//代表a[i]之前数列的差值,默认为0,
        for (int i=0; i!=A.size()-1; ++i) {//因为要检查a[i+1],所以I的最大值为A.size()-2,i等于(A.size()-2)+1时结束循环
            if (A[i]-A[i+1]==0) {//忽略0值
                continue;
            }
            else{
                if (front==0) {//前差值为零,说明之的元素值对单调都没有影响,默认未改动
                    front=A[i]-A[i+1];//当前差值为第一个有单调影响差值,记录,进入下次循环
                    continue;
                }
                if ((A[i]-A[i+1])*front<0) {//当前差值与前差值是否不同号
                    return false;//是,返回不是单调
                }
                else front=A[i]-A[i+1];//不是,当前差记录,进入下次循环
            }
        }
        return true;
    }
};
posted @ 2018-09-18 00:57  Kipper  阅读(398)  评论(0)    收藏  举报