1. 程式人生 > >LeetCode-896.Monotonic Array 單調陣列(C++實現)

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

三、測試結果
在這裡插入圖片描述
小感想:對於某個問題,當從一個角度思考去解決而長時間解決不了時,不妨換個角度思考,你會發現,其實並沒有想象中的那麼難。