本帖最后由 longlangcx 于 2013-7-6 09:11 编辑
你的实现似乎有几个问题,你那个y里面存的既不是最小值,也不是次大值,只是最大值之前的次大值,比如一个数组{1,5,4,3,2},那么你的最大值等于5,次大值将等于1。
还有一种情况,如果数组第一个值就是最大值,比如{5,4,3,2,1},那么你的最大值和次大值将都是5。
要我说最简单的就冒泡排序只跑2趟,arr.lenth * 2 - 3次比较就冒出最大值和次大值了。屌丝解法。
或者这样:- class MaxSec
- {
- public static void main(String[] args)
- {
- int[] arr = new int[]{100,3,2,5,23,6,7,34,5,25,8,1000};
- int max = arr[0], sec = Integer.MIN_VALUE;
- for(int i = 1; i < arr.length; i++){
- if (sec <= arr[i])
- {
- if (max <= arr[i])
- {
- sec = max;
- max = arr[i];
- }
- else
- sec = arr[i];
- }
- }
- System.out.println(max + ", " + sec);
- }
- }
复制代码 这样只要不是升序数组,总会比用两趟的冒泡少比较几次。
至于再高端的算法嘛,本屌不会了{:soso_e154:} |