LeetCode-896.Monotonic Array 单调数组(C++实现)
一、问题描述
An array is monotonic if it is either monotone increasing or monotone decreasing.
An array A is monotone increasing if for all i <= j, A[i] <= A[j]. An array A is monotone decreasing if for all i <= j, A[i] >= A[j].
Return true if and only if the given array A is monotonic.
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)1 <= A.length <= 50000
2)-100000 <= A[i] <= 100000
要求:判断数组A是否为单调数组,即对所有的 i <= j, A[i] <= A[j],或者对所有的 i <= j, A[i] >= A[j]。若为单调数组,返回true,否则返回false。
二、思路及代码
思路:
刚开始我想的是,遍历数组A,当其为升序或者降序时,则为单调数组,但无法实现当前几个元素相等时的判断,所以又重新思考判断单调性的方法。可以将A中的相邻两个元素相减(后面的元素减去前面的元素),结果放到数组T中,发现如果A不是单调数组时:T中的最小值min<0,最大值max>0;其他情况下为单调数组,故根据这一发现来判断。
代码:
bool isMonotonic(vector<int>& A) { int len = A.size(); if(len==1) return true; vector<int>T; for (int i = 0; i < len - 1; i++) { int n = A[i + 1] - A[i]; T.push_back(n); } vector<int>::iterator max, min; max = max_element(T.begin(), T.end()); min = min_element(T.begin(), T.end()); if (*min < 0 && *max>0) return false; else return true; }
三、测试结果
小感想:对于某个问题,当从一个角度思考去解决而长时间解决不了时,不妨换个角度思考,你会发现,其实并没有想象中的那么难。
- 【LeetCode-面试算法经典-Java实现】【153-Find Minimum in Rotated Sorted Array(找旋转数组中的最小数字)】
- 【LeetCode-面试算法经典-Java实现】【154-Find Minimum in Rotated Sorted Array II(找旋转数组中的最小数字II)】
- [leetcode]Merge Sorted Array (两个有序数组的合并 C语言实现)
- LeetCode 之 Merge Sorted Array — C++ 实现
- 【LeetCode-面试算法经典-Java实现】【081-Search in Rotated Sorted Array II(搜索旋转的排序数组)】
- 【LeetCode-面试算法经典-Java实现】【189-Rotate Array(旋转数组)】
- Leetcode 第四题实现两排序数组中位数 与C++vector应用
- LeetCode 之 Search in Rotated Sorted Array I II — C/C++ 实现
- LeetCode 之 Rotate Array — C++ 实现
- 一维数组的实现(Array, C++版)
- 【LeetCode-面试算法经典-Java实现】【215-Kth Largest Element in an Array(数组中第K大的数)】
- [C++]LeetCode 26: Remove Duplicates from Sorted Array(有序数组去重)
- 找出数组中第k大的数(时间复杂度分析、C++代码实现). TopK in array. ( leetcode - 215 )
- 【LeetCode-面试算法经典-Java实现】【026-Remove Duplicates from Sorted Array(删除排序数组中的重复元素)】
- 【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】
- 【LeetCode-面试算法经典-Java实现】【088-Merge Sorted Array(合并排序数组)】
- LeetCode 之 Kth Largest Element in an Array — C++ 实现
- 【LeetCode-面试算法经典-Java实现】【108-Convert Sorted Array to Binary Search Tree(排序数组转变为平衡二叉树)】
- C++实现数组中求第K大数
- leetcode 【 Find Minimum in Rotated Sorted Array II 】python 实现