2 steve yanrun steve_yanrun 于 2016.03.03 19:40 提问

一个简单的小算法求助

找出一个数组中既不是最大的数也不是最小的数,我的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);
    }
}

请大侠改正,用简单的算法,谢谢!

8个回答

dongfeng9ge
dongfeng9ge   Ds   Rxr 2016.03.04 11:22
已采纳

排序之后掐头去尾,然后随机选一个

qq_20039385
qq_20039385   2016.03.03 19:58

先对数组进行升序或降序排序,排好序不要数组两端的值就可以啦

gds2014
gds2014   2016.03.03 20:00

可以先排序,再取中间元素
Arrays.sort(arr);
mid=arr[arr.length()/2];


gds2014
gds2014   2016.03.03 20:00

可以先排序,再取中间元素
Arrays.sort(arr);
mid=arr[arr.length()/2];


qq_26946497
qq_26946497   2016.03.03 21:00

如果只找出一个就可以,那很简单啊。。
只要取前三个数就可以了。。。
如果是找出所有,那就和找出最大最小数完全一致=_=
感觉题目出的好奇怪。。
if(arr.length<3) {
throw new RuntimeException("无法取得匹配结果");
} else {
return Math.min(arr[0],arr[1],arr[2]);
}

luckyliuwenyuan
luckyliuwenyuan   2016.03.03 21:12

其实就是去掉最大和最小数的剩下的数,首先可以用冒泡排序,然后再截取数组中间的部分!

xionglangs
xionglangs   Rxr 2016.03.04 10:31

图片说明这个可以吧

qq_26946497
qq_26946497   2016.03.03 19:55

额。问个问题,就是"只要既不是最大也不是最小就满足条件"吗

steve_yanrun
steve_yanrun 嗯嗯
接近 2 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!