一、问题描述
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;
}
三、测试结果
小感想:对于某个问题,当从一个角度思考去解决而长时间解决不了时,不妨换个角度思考,你会发现,其实并没有想象中的那么难。