aboutsummaryrefslogtreecommitdiffstats
path: root/leetcode/3637
diff options
context:
space:
mode:
Diffstat (limited to 'leetcode/3637')
-rw-r--r--leetcode/3637/main.c42
1 files changed, 42 insertions, 0 deletions
diff --git a/leetcode/3637/main.c b/leetcode/3637/main.c
new file mode 100644
index 0000000..6f5cf7d
--- /dev/null
+++ b/leetcode/3637/main.c
@@ -0,0 +1,42 @@
+#include <stdbool.h>
+bool isTrionic(int *nums, int numsSize) {
+ if (numsSize < 4) {
+ return false;
+ }
+
+ // 防止[9,4,6,8]
+ if (nums[0] > nums[1]) {
+ return false;
+ }
+
+ enum { UP1, DOWN, UP2 } state = UP1;
+
+ // 状态机真好玩嘻嘻嘻
+ for (int i = 0; i < numsSize - 1; i++) {
+ if (nums[i] == nums[i + 1]) {
+ return false;
+ }
+
+ if (state == UP1) {
+ if (nums[i] < nums[i + 1]) {
+ continue;
+ } else {
+ state = DOWN;
+ }
+ } else if (state == DOWN) {
+ if (nums[i] > nums[i + 1]) {
+ continue;
+ } else {
+ state = UP2;
+ }
+ } else { // 既不等于UP1, 也不等于DOWN,就等于UP2
+ if (nums[i] < nums[i + 1]) {
+ continue;
+ } else {
+ return false;
+ }
+ }
+ }
+
+ return state == UP2;
+}