Skip to content

Commit 381fe51

Browse files
author
jiangweixu
committed
add peakFinding1D.js
1 parent 663e4da commit 381fe51

File tree

1 file changed

+60
-0
lines changed

1 file changed

+60
-0
lines changed

peakFinding1D.js

+60
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
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+
}

0 commit comments

Comments
 (0)