问题描述
- 一个简单的小算法求助
-
找出一个数组中既不是最大的数也不是最小的数,我的java代码如下(错误的):class NotMM{ public void NotMM(int arr[]){ int mid = arr[0]; for(int i=0;i<arr.length-2;i++){ if(arr[i+1]>arr[i]&&arr[i+1]<arr[i+2]){ mid = arr[i+1]; }else if(arr[i+1]<arr[i]&&arr[i+1]>arr[i+2]){ mid = arr[i+1]; }else if(arr[i]<arr[i+1]&&arr[i]>arr[i+2]){ mid = arr[i]; }else if(arr[i]>arr[i+1]&&arr[i]<arr[i+2]){ mid = arr[i]; }else{ mid = arr[i+2]; } System.out.println(mid); } } } public class Ex1_4 { public static void main(String[] args) { NotMM m = new NotMM(); int arr[] = new int[]{2,4,6,1,7,5,3,8}; m.NotMM(arr); } }
请大侠改正,用简单的算法,谢谢!
解决方案
排序之后掐头去尾,然后随机选一个
解决方案二:
先对数组进行升序或降序排序,排好序不要数组两端的值就可以啦
解决方案三:
可以先排序,再取中间元素
Arrays.sort(arr);
mid=arr[arr.length()/2];
解决方案四:
可以先排序,再取中间元素
Arrays.sort(arr);
mid=arr[arr.length()/2];
解决方案五:
如果只找出一个就可以,那很简单啊。。
只要取前三个数就可以了。。。
如果是找出所有,那就和找出最大最小数完全一致=_=
感觉题目出的好奇怪。。
if(arr.length<3) {
throw new RuntimeException("无法取得匹配结果");
} else {
return Math.min(arr[0],arr[1],arr[2]);
}
解决方案六:
其实就是去掉最大和最小数的剩下的数,首先可以用冒泡排序,然后再截取数组中间的部分!
解决方案八:
额。问个问题,就是"只要既不是最大也不是最小就满足条件"吗
时间: 2024-12-28 15:32:58