锁定老帖子 主题:计算数组中的最小值和最大值
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-24
最后修改:2009-06-24
下面代码中的第一种方法是最简单最容易想到的方法,但比较次数较多,所用时间较长。第二种方法的效率就高一些了。
public class GetMinMaxValue { public static void main(String[] args) { int[] a = {5, 2, 7, 16, 9, 64, 35, 79, 96, 28}; getMinMax1(a); getMinMax2(a); } public static void getMinMax1(int[] a) { int min = 0; int max = 0; min = a[0]; max = a[0]; for(int i=1; i<a.length-1; i++) { if(a[i] < min) min = a[i]; if(a[i] > max) max = a[i]; } System.out.println("Method 1"); System.out.println("min value is : " + min); System.out.println("max value is : " + max); } public static void getMinMax2(int[] a) { int index = 0; int min = 0; int max = 0; if(a.length % 2 == 0) { if(a[0] <= a[1]) { min = a[0]; max = a[1]; } else { min = a[1]; max = a[0]; } index = 2; } else { min = a[0]; max = a[0]; index = 1; } for(int i=index; i<a.length-1; i++) { if(a[i] <= a[i+1]) { if(a[i] < min) min = a[i]; if(a[i+1] > max) max = a[i+1]; } else { if(a[i+1] < min) min = a[i+1]; if(a[i] > max) max = a[i]; } } System.out.println("Method 2"); System.out.println("min value is : " + min); System.out.println("max value is : " + max); } } //输出为: //Method 1 //min value is : 2 //max value is : 96 //Method 2 //min value is : 2 //max value is : 96
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-24
学习了啊我也就会第一种
|
|
返回顶楼 | |
发表时间:2009-06-24
楼主第一个方法有点问题吧
为啥 for(int i=2; i<a.length-1; i++) 中的下标要从2开始啊,这样就不能判断第一个数了啊 比如说数组中为 int[] a={1,2,3,4,5} 输出max=4,min=2,不能考虑到前后两个数 感觉应该从应该从0开始,for(int i=0;i<a.length;i++) 新手发言得罪指出请勿见怪 |
|
返回顶楼 | |
发表时间:2009-06-24
fehly 写道 感觉应该从应该从0开始 呵呵 老兄 你说的对 是我写错了 失误啊 |
|
返回顶楼 | |
发表时间:2009-06-24
fehly 写道 学习了啊我也就会第一种
第二种是我从算法导论这本书里看的 第一种方法需要比较2n-2次, 而第二种方法需要比较3*n/2次(下取整)。 就是每次比较两个数,然后较小的数跟min比较,较大的数跟max比较即可,其中初始化时,如数组a中有奇数个元素,则min和max都初始化为数组的第一个数a[0](这样数组a后面就有偶数个元素,可以两两比较了),如数组a有偶数个元素,则比较前两个,较小的为min,较大的为max(这样数组a后面也有偶数个元素,可以两两比较)。 这么说,不知道说明白了没,不知老兄你能明白不? |
|
返回顶楼 | |
发表时间:2009-06-25
对于提高基本功有好处
|
|
返回顶楼 | |
发表时间:2009-06-25
直接Array.sort()就搞定了吧
|
|
返回顶楼 | |
发表时间:2009-06-26
一次循环搞定。。。
package com.test.calculater; public class Test413936 { public int min=Integer.MAX_VALUE; public int max=Integer.MIN_VALUE; public void toGetMaxAndMin(int[] numbers){ for(int number:numbers){ if(number<min){ min=number; } if(number>max){ max=number; } } } public static void main(String[] agrs){ Test413936 test=new Test413936(); int[] numbers={5,2,7,16,9,64,35,79,96,28}; test.toGetMaxAndMin(numbers); System.out.println("Max Value:"+test.max); System.out.println("Min Value:"+test.min); } } |
|
返回顶楼 | |
发表时间:2009-06-26
你是不是从C转Java的,写法这么像C
Java才入门啊,而且算法方面还没有入门。。。 继续加油 |
|
返回顶楼 | |
发表时间:2009-06-26
leeldy 写道 你是不是从C转Java的,写法这么像C
Java才入门啊,而且算法方面还没有入门。。。 继续加油 恩 谢谢 会继续努力的 我确实是先学的c 后来学的java 现在基本用java 请教一下,为什么我的写法像c呢?请帮忙解答一下。 |
|
返回顶楼 | |