File tree 1 file changed +60
-0
lines changed
1 file changed +60
-0
lines changed Original file line number Diff line number Diff line change
1
+ /*
2
+ * 查找峰值,一位数组的情况下。定义峰值a[i],满足a[i]>a[i-1], a[i]>a[i+1].
3
+ * */
4
+
5
+ /*
6
+ * 1、二分查找,复杂度O(logn)
7
+ * */
8
+ function peakFinding1D ( arr ) {
9
+ var l = arr . length , mid = Math . floor ( l / 2 ) ;
10
+
11
+ switch ( true ) {
12
+ case l === 1 :
13
+ return arr [ 0 ] ;
14
+ break ;
15
+ case l === 2 :
16
+ return arr [ 0 ] > arr [ 1 ] ? arr [ 0 ] : arr [ 1 ] ;
17
+ break ;
18
+ default :
19
+ break ;
20
+ }
21
+
22
+ if ( arr [ mid ] < arr [ mid + 1 ] ) {
23
+ return peakFinding1D ( arr . slice ( mid , l ) ) ;
24
+ }
25
+ if ( arr [ mid ] < arr [ mid - 1 ] ) {
26
+ return peakFinding1D ( arr . slice ( 0 , mid ) )
27
+ }
28
+ return arr [ mid ] ;
29
+ }
30
+
31
+
32
+ /*
33
+ * 2、原始暴利检索
34
+ * */
35
+ function peakFinding1DBrutSearch ( arr ) {
36
+ var l = arr . length ;
37
+ if ( l === 1 ) {
38
+ return arr [ 0 ] ;
39
+ }
40
+ for ( var i = 0 ; i < l ; i ++ ) {
41
+ if ( i === 0 && arr [ i ] > arr [ i + 1 ] ) {
42
+ return arr [ i ] ;
43
+ }
44
+ if ( i === l - 1 && arr [ i ] > arr [ i - 1 ] ) {
45
+ return arr [ i ] ;
46
+ }
47
+ if ( arr [ i ] > arr [ i - 1 ] && arr [ i ] > arr [ i + 1 ] ) {
48
+ return arr [ i ] ;
49
+ }
50
+ }
51
+ }
52
+
53
+
54
+ function getArr ( n ) {
55
+ var n = n || 20000 , i = 0 , arr = [ ] ;
56
+ while ( i < n ) {
57
+ arr [ i ++ ] = Math . floor ( Math . random ( ) * 100 ) ;
58
+ }
59
+ return arr ;
60
+ }
You can’t perform that action at this time.
0 commit comments