《今日头条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一起交流学习哦~
[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一起交流学习哦~
相关文章推荐
- 2017今日头条前端工程师-找出函数最宽尖峰(70)
- 今日头条2017暑期实习生招聘笔试编程题之函数最宽尖峰
- 2017今日头条实习测试
- ACM--面试--回文解码--今日头条2017实习offer题目
- 今日头条C++后台开发实习面试总结
- 2017实习生今日头条前端面经
- 今日头条2017后端工程师实习生笔试题
- 【牛客网】今日头条2017客户端工程师实习生笔试题
- 百度2017暑期实习编程题
- 2017-今日头条笔试题
- 2017今日头条校招前端面试题(一面)
- 今日头条2017校招(出题数目)
- 木棒拼图(multiset 的应用)----今日头条2017后端工程师实习生笔试题
- 【牛客网】马三来刷题之回文解码(今日头条2017年客户端实习在线笔试题)
- 算法面试题-今日头条2017客户端工程师实习生笔试题4:或与加
- 今日头条2017秋季校招在线编程题解法参考
- 今日头条2017后端工程师笔试题
- 今日头条2017后端工程师实习生笔试题
- [今日头条] 2017客户端工程师实习生笔试题
- 2017今日头条测试开发