如果数组是单调递增或单调递减的,那么它是  单调 的 。
如果对于所有 i <= j,nums[i] <= nums[j],那么数组 nums 是单调递增的。 如果对于所有 i <= j,nums[i]> = nums[j],那么数组 nums 是单调递减的。
当给定的数组 nums 是单调数组时返回 true,否则返回 false。
示例 1:
**输入:** nums = [1,2,2,3]
**输出:** true
示例 2:
**输入:** nums = [6,5,4,4]
**输出:** true
示例 3:
**输入:** nums = [1,3,2]
**输出:** false
提示:
1 <= nums.length <= 105 
-105 <= nums[i] <= 105 
方法一:两次遍历
遍历两次数组,分别判断其是否为单调递增或单调递减。
代码
[sol1-C++]1 2 3 4 5 6
   | class Solution { public:     bool isMonotonic(vector<int>& nums) {         return is_sorted(nums.begin(), nums.end()) || is_sorted(nums.rbegin(), nums.rend());     } };
  | 
  
[sol1-Java]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
   | class Solution {     public boolean isMonotonic(int[] nums) {         return isSorted(nums, true) || isSorted(nums, false);     }
      public boolean isSorted(int[] nums, boolean increasing) {         int n = nums.length;         if (increasing) {             for (int i = 0; i < n - 1; ++i) {                 if (nums[i] > nums[i + 1]) {                     return false;                 }             }         } else {             for (int i = 0; i < n - 1; ++i) {                 if (nums[i] < nums[i + 1]) {                     return false;                 }             }         }         return true;     } }
  | 
  
[sol1-Golang]1 2 3
   | func isMonotonic(nums []int) bool {     return sort.IntsAreSorted(nums) || sort.IsSorted(sort.Reverse(sort.IntSlice(nums))) }
  | 
  
[sol1-JavaScript]1 2 3 4 5 6 7
   | var isMonotonic = function(nums) {     return isSorted(nums) || isSorted(nums.reverse()); };
  function isSorted(nums) {     return nums.slice(1).every((item, i) => nums[i] <= item) }
  | 
  
[sol1-C]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
   | bool isSorted(int* nums, int numsSize, bool increasing) {     if (increasing) {         for (int i = 0; i < numsSize - 1; ++i) {             if (nums[i] > nums[i + 1]) {                 return false;             }         }     } else {         for (int i = 0; i < numsSize - 1; ++i) {             if (nums[i] < nums[i + 1]) {                 return false;             }         }     }     return true; }
  bool isMonotonic(int* nums, int numsSize) {     return isSorted(nums, numsSize, true) || isSorted(nums, numsSize, false); }
  | 
  
复杂度分析
方法二:一次遍历
遍历数组 nums,若既遇到了 nums}[i]>\textit{nums}[i+1] 又遇到了 nums}[i’]<\textit{nums}[i’+1],则说明 nums 既不是单调递增的,也不是单调递减的。
代码
[sol2-C++]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
   | class Solution { public:     bool isMonotonic(vector<int>& nums) {         bool inc = true, dec = true;         int n = nums.size();         for (int i = 0; i < n - 1; ++i) {             if (nums[i] > nums[i + 1]) {                 inc = false;             }             if (nums[i] < nums[i + 1]) {                 dec = false;             }         }         return inc || dec;     } };
  | 
  
[sol2-Java]1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
   | class Solution {     public boolean isMonotonic(int[] nums) {         boolean inc = true, dec = true;         int n = nums.length;         for (int i = 0; i < n - 1; ++i) {             if (nums[i] > nums[i + 1]) {                 inc = false;             }             if (nums[i] < nums[i + 1]) {                 dec = false;             }         }         return inc || dec;     } }
  | 
  
[sol2-Golang]1 2 3 4 5 6 7 8 9 10 11 12
   | func isMonotonic(nums []int) bool {     inc, dec := true, true     for i := 0; i < len(nums)-1; i++ {         if nums[i] > nums[i+1] {             inc = false         }         if nums[i] < nums[i+1] {             dec = false         }     }     return inc || dec }
  | 
  
[sol2-JavaScript]1 2 3 4 5 6 7 8 9 10 11 12 13
   | var isMonotonic = function(nums) {     let inc = true, dec = true;     const n = nums.length;     for (let i = 0; i < n - 1; ++i) {         if (nums[i] > nums[i + 1]) {             inc = false;         }         if (nums[i] < nums[i + 1]) {             dec = false;         }     }     return inc || dec; };
  | 
  
[sol2-C]1 2 3 4 5 6 7 8 9 10 11 12 13
   | bool isMonotonic(int* nums, int numsSize) {     bool inc = true, dec = true;     int n = numsSize;     for (int i = 0; i < n - 1; ++i) {         if (nums[i] > nums[i + 1]) {             inc = false;         }         if (nums[i] < nums[i + 1]) {             dec = false;         }     }     return inc || dec; }
  | 
  
复杂度分析