您的位置:首页 > 其它

《今日头条2017暑期实习》:找出函数的最宽尖峰

2017-04-21 11:19 375 查看
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/70312817冷血之心的博客)

[align=left]
[/align][align=left]  找出函数的最宽尖峰[/align][align=left]  描述:按照数组的形式给出函数f(x)的取值,数组取值都为整数,函数在每个点都是严格单调递增或者严格递减(即A[i-1]!=A[i]!=A[i+1]),[/align][align=left]  要求找出最宽的先上升后下降的区别(这个区间内函数的值必须先上升到一个点后再下降,区间的上升段和下降段长度必须都大于0)[/align][align=left]  1、如果找到符合条件的最大区间,输出数组对应的左右下标(有多个最大区间时,输出最左边的那个)[/align][align=left]  2、找不到输出-1 -1[/align][align=left] [/align]

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
public class Test1 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while(scanner.hasNext()){
int n = scanner.nextInt();
int[] arr = new int
;
for (int i = 0; i < arr.length; i++) {
arr[i] = scanner.nextInt();
}
int left=0,right = 0;
List<Integer> list = new ArrayList<Integer>();
// 判断第一个是否是极小值点
if(arr[0]<arr[1]){
list.add(0);
}
for (int i = 1; i < arr.length-1; i++) {
if(arr[i-1]>arr[i]&&arr[i]<arr[i+1]){
list.add(i);
}
// 判断最后一个是否是极小值点
if(i==arr.length-2&&arr[i]>arr[i+1]){
list.add(i+1);
}
}
//判断结果进行输出
// 1、极小值点只有1个
if(list.size()==1){
System.out.println("-1 -1");
}else if(list.size()==2){ // 2、极小值点刚好有2个
left=list.get(0);
right=list.get(1);
System.out.println(left+" "+right);
}else {
int[] max = new int[list.size()-1];
for (int i = 0; i < list.size()-1; i++) {
max[i]=list.get(i+1)-list.get(i);
}
int maxIndex = getMaxIndex(max);
left=list.get(maxIndex);
right=list.get(maxIndex+1);
System.out.println(left+" "+right);
}
}
}
//获取最大值的下标
public static int getMaxIndex(int[] arr){
int maxIndex = 0; //获取到的最大值的角标
for(int i=0; i<arr.length; i++){
if(arr[i] > arr[maxIndex]){
maxIndex = i;
}
}
return maxIndex;
}
}


如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: