当前位置:编程学习 > JAVA >>

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


//定义一个整型数组,求出数组最大值和最小值 并输出结果
    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);
    }


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

--------------------编程问答--------------------
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]。
--------------------编程问答-------------------- 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);
}
这应该是最简单的了! --------------------编程问答-------------------- 排个序不就行了???

    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]);
    } --------------------编程问答-------------------- 对于一个时间复杂度为 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);
}
--------------------编程问答--------------------
引用 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……

+1

排序神马的最讨厌了 --------------------编程问答--------------------
引用 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] ……


不能用函数。 --------------------编程问答--------------------
引用 4 楼 jiakai0419 的回复:
对于一个时间复杂度为 O(n) 的算法。

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

其实没必要。

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

Java code


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


因为是初学,所以每做一个练习题,都希望能够有人对它提出意见和批评~! --------------------编程问答--------------------
引用 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……


原来如此~技巧+1 --------------------编程问答-------------------- 一个数如果是最大数就肯定不是最小数,反之亦然
所以第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);
    }
--------------------编程问答--------------------
引用 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; ……


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

我还不知道java里有没有象php一样的关联数组,so…… --------------------编程问答--------------------
引用 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 ……

java数组下标是从0开始滴
补充:Java ,  Java SE
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,