大家看这个计算题还有什么可以优化的地方不?

pandaidea 2011-11-10 11:19:56

//定义一个整型数组,求出数组最大值和最小值 并输出结果
public static void minMax(){
int oldArr[] = {1,3,4,5,6,9,6,6,2,5,4,7,6,7,8,5};
int minNum = 0; //最小值
int maxNum = 0; //最大值
for(int i = 0, j = 1; i < oldArr.length ; i ++ ){
if(oldArr[i] > maxNum){
maxNum = oldArr[i];
}
if(minNum == 0){
if(oldArr[i] < oldArr[j]){
minNum = oldArr[i];
}else{
j++;
}
}
}
System.out.println("最小:"+minNum+"最大:"+maxNum);
}


不用任何类、函数,直接用最原始的写法。

...全文
152 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
小绵羊 2011-11-12
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 pandaidea 的回复:]

引用 9 楼 zyc13701469860 的回复:
一个数如果是最大数就肯定不是最小数,反之亦然
所以第2个if可以写成else if,当这个数是最大数时,可以少做1次判断
Java code

public static void minMax(int[] array) {
int min = array[0];
int max = array[0];
for (int i ……
[/Quote]
java数组下标是从0开始滴
沧海雪 2011-11-11
  • 打赏
  • 举报
回复
public static void main(String[] args) {
int oldArr[] = {1,3,4,5,6,9,6,6,2,5,4,7,6,7,8,5};
int max = oldArr[0],min = oldArr[0];
for(int i = 0;i < oldArr.length;i++ ){
if(oldArr[i] > max)max = oldArr[i];
if(oldArr[i] < min)min = oldArr[i];
}
System.out.println("最大值"+max);
System.out.println("最小值"+min);
}
这应该是最简单的了!
Mourinho 2011-11-11
  • 打赏
  • 举报
回复
一个数如果是最大数就肯定不是最小数,反之亦然
所以第2个if可以写成else if,当这个数是最大数时,可以少做1次判断

public static void minMax(int[] array) {
int min = array[0];
int max = array[0];
for (int i = 1; i < array.length; i++) {
if ( array[i] > max) {
max = array[i];
}
else if ( array[i] < min) {
min = array[i];
}
}
System.out.println("min: " + min + " max: " + max);
}
pandaidea 2011-11-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 shine333 的回复:]
Java code

int minNum = oldArr[0];
int maxNum = oldArr[0];
for (int i = 1; i < oldArr.length; i++) {
if (minNum > oldArr[i]) {
minNum = oldArr[i];
}
if (maxNum > oldArr[i]) {
maxNum = o……
[/Quote]

原来如此~技巧+1
pandaidea 2011-11-11
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 jiakai0419 的回复:]

对于一个时间复杂度为 O(n) 的算法。

楼主为什么这么执着于他的优化?

其实没必要。

你的代码错了。给你写了个正确的。

Java code


public static void minMax(int[] array) {
int min = array[0];
int max = array[0];
for (int……
[/Quote]

因为是初学,所以每做一个练习题,都希望能够有人对它提出意见和批评~!
pandaidea 2011-11-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 xwguan 的回复:]

排个序不就行了???

public static void minMax()
{
int oldArr[] = {1, 3, -1, 4, 5, 6, 9, 6, 6, 2, 5, 4, 7, 6, 7, 8, 5};
Arrays.sort(oldArr);
System.out.println(oldArr[0] ……
[/Quote]

不能用函数。
小绵羊 2011-11-11
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 shine333 的回复:]
Java code
int minNum = oldArr[0];
int maxNum = oldArr[0];
for (int i = 1; i < oldArr.length; i++) {
if (minNum > oldArr[i]) {
minNum = oldArr[i];
}
if (maxNum > oldArr[i]) {
maxNum = ol……
[/Quote]
+1

排序神马的最讨厌了
pandaidea 2011-11-11
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 zyc13701469860 的回复:]
一个数如果是最大数就肯定不是最小数,反之亦然
所以第2个if可以写成else if,当这个数是最大数时,可以少做1次判断
Java code

public static void minMax(int[] array) {
int min = array[0];
int max = array[0];
for (int i = 1; ……
[/Quote]

但是如果没有索引为0的key呢?

我还不知道java里有没有象php一样的关联数组,so……
jiakai0419 2011-11-11
  • 打赏
  • 举报
回复
对于一个时间复杂度为 O(n) 的算法。

楼主为什么这么执着于他的优化?

其实没必要。

你的代码错了。给你写了个正确的。


public static void minMax(int[] array) {
int min = array[0];
int max = array[0];
for (int i = 1; i < array.length; i++) {
if ( array[i] > max) {
max = array[i];
}
if ( array[i] < min) {
min = array[i];
}
}
System.out.println("min: " + min + " max: " + max);
}
xwguan 2011-11-11
  • 打赏
  • 举报
回复
排个序不就行了???

public static void minMax()
{
int oldArr[] = {1, 3, -1, 4, 5, 6, 9, 6, 6, 2, 5, 4, 7, 6, 7, 8, 5};
Arrays.sort(oldArr);
System.out.println(oldArr[0] + " " + oldArr[oldArr.length - 1]);
}
shine333 2011-11-10
  • 打赏
  • 举报
回复

int minNum = oldArr[0];
int maxNum = oldArr[0];
for (int i = 1; i < oldArr.length; i++) {
if (minNum > oldArr[i]) {
minNum = oldArr[i];
}
if (maxNum > oldArr[i]) {
maxNum = oldArr[i];
}
}

第一,没看懂为何要j这个变量
第二,BUG!假设数组是{-1,-2,-3},你可以试试看运行你原先的程序。总之,查找数组最大最小的时候,初始的min/max绝对不要设置成0,而是array[0]。

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧