您的位置:首页 > 编程语言 > C语言/C++

LeetCode-896.Monotonic Array 单调数组(C++实现)

2018-12-02 21:59 561 查看

一、问题描述
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;
}

三、测试结果

小感想:对于某个问题,当从一个角度思考去解决而长时间解决不了时,不妨换个角度思考,你会发现,其实并没有想象中的那么难。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐