import java.util.ArrayList;
import java.util.List;
public class FindPeaksTest {
// //参数:数组,数组大小
public static void findPeaks(int[] num, int count) {
List<Integer> locList = process(num);//经过处理重复数据后的下标
List<Integer> sign = new ArrayList<Integer>();
for (int i = 1; i < locList.size(); i++) {
/* 相邻值做差: *小于0,,赋-1 *大于0,赋1 *等于0,赋0 */
int diff = num[locList.get(i)] - num[locList.get(i-1)];
if (diff > 0) {
sign.add(1);
} else if (diff < 0) {
sign.add(-1);
} else {
sign.add(0);
}
}
// 再对sign相邻位做差
// 保存极大值和极小值的位置
List<Integer> indMax = new ArrayList<Integer>();
List<Integer> indMin = new ArrayList<Integer>();
for (int j = 1; j < sign.size(); j++) {
int diff = sign.get(j) - sign.get(j - 1);
if (diff < 0) {
indMax.add(locList.get(j));
} else if (diff > 0) {
indMin.add(locList.get(j));
}
}
System.out.println("极大值为:");
for (int m = 0; m < indMax.size(); m++) {
System.out.print(num[indMax.get(m)] + " ");
}
System.out.println();
System.out.println("极大值下标为:");
for (int m = 0; m < indMax.size(); m++) {
System.out.print(indMax.get(m) + " ");
}
System.out.println();
System.out.println("极小值为:");
for (int n = 0; n < indMin.size(); n++) {
System.out.print(num[indMin.get(n)] + " ");
}
System.out.println();
System.out.println("极小值下标为:");
for (int m = 0; m < indMin.size(); m++) {
System.out.print(indMin.get(m) + " ");
}
}
/**keep only the first of any adjacent pairs of equal values
* @return
*/
public static List<Integer> process(int[] array){
List<Integer> locList = new ArrayList<Integer>();
int last = Integer.MAX_VALUE;
for(int i=0;i<array.length;i++){
if(last==Integer.MAX_VALUE){
last = array[i];
locList.add(i);
}else{
if(last!=array[i]){
locList.add(i);
last = array[i];
}
}
}
return locList;
}
public static void main(String[] args) {
// int a[] = { 1, 2, 10, 2, 4, 1, 8, 10, 23, 0,5,4 };
int a[] ={1,1,1,2,1,1,1,1,2,3,4,4,3,1,1,1,2,1,1,1,1,2,4,3,2,1,2,4,4,4,3,4,2,2,1,1,1,2,3,4,3,4,4,4,4,4,3,2,2,2,2,1,1,4,5,4,3,1,1,2,3,4,4,5,4,4,6};
// int a[] = {3,4,5,3,2};
// process(a);
findPeaks(a, a.length);
}
}
java 实现findpeaks
最新推荐文章于 2023-04-18 20:34:28 发布