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;
}

三、测试结果
在这里插入图片描述
小感想:对于某个问题,当从一个角度思考去解决而长时间解决不了时,不妨换个角度思考,你会发现,其实并没有想象中的那么难。

猜你喜欢

转载自blog.csdn.net/qq_38358582/article/details/84728594
今日推荐