题目
小米编程大赛里面的练习题
描述
给出一个有序数列随机旋转之后的数列,如原有序数列为:[0,1,2,4,5,6,7] ,旋转之后为[4,5,6,7,0,1,2]。
假定数列中无重复元素,且数列长度为奇数。
求出旋转数列的中间值。如数列[4,5,6,7,0,1,2]的中间值为4。
输入
4,5,6,7,0,1,2
输出
4
输入样例
1
1,2,3
4,5,6,7,0,1,2
12,13,14,5,6,7,8,9,10
输出样例
1
2
4
9
我的思路:方法1 这个可以排序后直接取。
方法2 也可以不排序,找出旋转的点直接取到中间值。
我的代码 :第二个方法
/**
* 已引入:
* java.util.*
* 要使用其他架包请使用完整路径,如:
* java.util.List<java.util.List<Integer>> list = new java.util.ArrayList<java.util.List<Integer>>(100);
* @param line 为单行测试数据
* @return 处理后的结果
*/
private static String solution(String line) {
// 在此处理单行数据
String[] array = line.split(",");
int[] num =new int[array.length];
for(int i = 0 ; i < array.length ; i ++){
// System.out.println(array[i]);
num[i]=Integer.parseInt(array[i]);
}
int res = 0;
int index = num.length;
if(num.length==1){
res = num[0];
return new String(String.valueOf(res));
}
for(int i = 1 ;i < num.length ; i ++){
if(num[i-1]>num[i]){
index = i;
break;
}
}
if(index==num.length){
res = num[num.length/2];
}else{
if(index<=num.length/2){
res = num[num.length/2+index];
}else{
res = num[index-num.length/2-1];
}
}
// 返回处理后的结果
return new String(String.valueOf(res));
}