0%

896. Monotonic Array

O(n) time O(1) space

1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
bool isMonotonic(vector<int>& A) {
int n = A.size(), store = 0;
for (int i = 1; i < n; ++i) {
int c = A[i - 1] > A[i] ? -1 : (A[i - 1] < A[i]); // -1表示递减 0表示相等 1表示递增
if (c == 0) continue; // 相等则跳过
if (store * c < 0) return false;
store = c; // 只保存严格递增或递减
}
return true;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
14
class Solution {
public:
bool isMonotonic(vector<int>& A) {
int n = A.size(), isInc = -1; // -1表示还没遇到严格递增或递减
for (int i = 1; i < n; ++i) {
if (A[i] == A[i - 1]) continue; // 相邻两数相同则跳过
if (isInc == -1) { // 第一次遇到严格递增或递减
isInc = A[i] > A[i - 1];
}
if (isInc ^ (A[i - 1] < A[i])) return false; // 如果之前的趋势和现在不一样,注意异或的优先级
}
return true;
}
};
1
2
3
4
5
6
7
8
9
10
11
12
13
class Solution {
public:
bool isMonotonic(vector<int>& A) {
char trend = 0;
for (int n = size(A), i = 1; i < n; ++i) {
if (A[i - 1] == A[i]) continue; // 相邻两数相同则跳过
if (trend == 0) { // 第一次遇到严格递增或递减
trend = A[i] - A[i - 1];
} else if ((trend ^ (A[i] - A[i - 1])) < 0) return false;
}
return true;
}
};