• 896. Monotonic Array


    问题:

    给定数组,判断若为单调增(A[i]>=A[i-1])或者单调减(A[i]<=A[i-1])数组,则返回true,否则返回false。

    Example 1:
    Input: [1,2,2,3]
    Output: true
    
    Example 2:
    Input: [6,5,4,4]
    Output: true
    
    Example 3:
    Input: [1,3,2]
    Output: false
    
    Example 4:
    Input: [1,2,4,5]
    Output: true
    
    Example 5:
    Input: [1,1,1]
    Output: true 
    
    Note:
    1 <= A.length <= 50000
    -100000 <= A[i] <= 100000
    

      

    解法1:

    设置flag记录数组整体趋势allincre

    和当前的趋势curincre

    若二者不同,则返回false,否则一直到最后,则返回true

    趋势算法:

    a==pre?0:(a-pre)/abs(a-pre);

    当前数值a和上一个数组pre之差,除以差的绝对值。

    ==0则为水平

    ==-1则为单调递减

    ==1则为单调递增

    代码参考:

     1 class Solution {
     2 public:
     3     bool isMonotonic(vector<int>& A) {
     4         int allincre = 0;
     5         int pre=A[0];
     6         for(int a:A){
     7             int curincre=a==pre?0:(a-pre)/abs(a-pre);
     8             if(allincre==0)allincre=curincre;
     9             else if(curincre!=0 && allincre!=curincre) return false;
    10             pre=a;
    11         }
    12         return true;
    13     }
    14 };

    解法2:

    设置两个flag:

    incre:true单调递增,false出现递减

    decre:true单调递减,false出现递增

    初始化二者皆为true

    遍历数组,最后若其中一个出现false(反趋势),则返回false

    代码参考:

     1 class Solution {
     2 public:
     3     bool isMonotonic(vector<int>& A) {
     4         bool incre = true, decre = true;
     5         for(int i=1; i<A.size(); i++){
     6             incre&=A[i]>=A[i-1];//出现一个decre则变为false
     7             decre&=A[i]<=A[i-1];//出现一个incre则变为false
     8         }
     9         return incre||decre;
    10     }
    11 };
  • 相关阅读:
    转:每个架构师都应该研究下康威定律
    使用OpenShiftFQ上外网
    关系模式设计
    数据库应用系统工程过程
    数据库系统
    四种常见 Git 工作流比较
    Git 进阶指南
    C#高性能TCP服务的多种实现方式
    浮动广告
    <span></span>
  • 原文地址:https://www.cnblogs.com/habibah-chang/p/12949056.html
Copyright © 2020-2023  润新知