File tree Expand file tree Collapse file tree 1 file changed +120
-0
lines changed Expand file tree Collapse file tree 1 file changed +120
-0
lines changed Original file line number Diff line number Diff line change
1
+ /*
2
+ 如果数组是单调递增或单调递减的,那么它是单调的。
3
+
4
+ 如果对于所有 i <= j,A[i] <= A[j],那么数组 A 是单调递增的。 如果对于所有 i <= j,A[i]> = A[j],那么数组 A 是单调递减的。
5
+
6
+ 当给定的数组 A 是单调数组时返回 true,否则返回 false。
7
+
8
+
9
+
10
+ 示例 1:
11
+
12
+ 输入:[1,2,2,3]
13
+ 输出:true
14
+
15
+ 示例 2:
16
+
17
+ 输入:[6,5,4,4]
18
+ 输出:true
19
+
20
+ 示例 3:
21
+
22
+ 输入:[1,3,2]
23
+ 输出:false
24
+
25
+ 示例 4:
26
+
27
+ 输入:[1,2,4,5]
28
+ 输出:true
29
+
30
+ 示例 5:
31
+
32
+ 输入:[1,1,1]
33
+ 输出:true
34
+
35
+
36
+
37
+ 提示:
38
+
39
+ 1 <= A.length <= 50000
40
+ -100000 <= A[i] <= 100000
41
+ */
42
+
43
+ bool isMonotonic(int* A, int ASize)
44
+ {
45
+ bool increase = false;
46
+ bool decrease = false;
47
+
48
+ for(int i = 0; i < ASize-1; ++i)
49
+ {
50
+ increase |= A[i] < A[i+1];
51
+ decrease |= A[i] > A[i+1];
52
+ if(increase && decrease)
53
+ return false;
54
+ }
55
+
56
+ return true;
57
+ }
58
+
59
+ /*
60
+ 解题思想:
61
+ 如果一个数列在遍历过程中,时而递增(只要有一次上升,increase就被置一),
62
+ 时而递减(只要有一次下降,decrease就被置一),那么这个数列就不是单调的,
63
+ 所以在遍历过程中,如果出现increase和decrease同时为1的情况,那么就说明
64
+ 数列不是单调的。
65
+
66
+ 对于A[i]和A[i+1]相等的情况,位与运算则会保持之前的状态,不会改变之前遍历
67
+ 数组的增减性。
68
+ */
69
+
70
+ bool isMonotonic(int* A, int ASize)
71
+ {
72
+ int up=1,down=1;
73
+ for(int i=0;i<ASize-1;i++)
74
+ {
75
+ if(A[i]>=A[i+1])
76
+ down++;
77
+ if(A[i]<=A[i+1])
78
+ up++;
79
+ }
80
+ if(up==ASize||down==ASize)
81
+ return true;
82
+ else
83
+ return false;
84
+ }
85
+
86
+ /*
87
+ 另一种方法:
88
+ 对每一步递增或者递减进行计数(起始值为1),如果是递增序列或者
89
+ 递减序列,则步数等于元素个数。
90
+ */
91
+
92
+ bool isMonotonic(int* A, int ASize) {
93
+ bool flag = A[0] >= A[ASize-1]? true:false;
94
+ if (flag)
95
+ {
96
+ for ( int i = 0; i < ASize-1; i++ )
97
+ {
98
+ if (A[i] < A[i+1])
99
+ return false;
100
+ }
101
+ }
102
+ else
103
+ {
104
+ for ( int i = 0; i < ASize-1; i++ )
105
+ {
106
+ if (A[i] > A[i+1])
107
+ return false;
108
+ }
109
+ }
110
+ return true;
111
+ }
112
+
113
+ /*
114
+ 另一种方法:
115
+ 对于单调数列,递减的话,最后一个元素一定小于等于第一个元素;
116
+ 递增的话,最后一个元素一定大于等于第一个元素。
117
+ 所以可以先比较数组中第一个元素和最后一个元素,将比较结果作为
118
+ 数组递增或者递减的标志,
119
+ 在后续的遍历过程中,如果比较结果和之前设定的标志相反,则直接返回false。
120
+ */
You can’t perform that action at this time.
0 commit comments