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; }
三、測試結果
小感想:對於某個問題,當從一個角度思考去解決而長時間解決不了時,不妨換個角度思考,你會發現,其實並沒有想象中的那麼難。