首页 > 解决方案 > 你能告诉我我的代码是否可以找到数组中的最大和最小元素是否足够有效..?

问题描述

代码的效率和时间复杂度?我正在使用 if 和 else 语句运行 while 循环来查找最大和最小整数而不是 for 循环我只想知道我的代码是否足够高效或者我需要使用 for 循环,我还想知道是否有任何快捷方式找到像 for 循环这样的时间复杂度 - 它是 n^2,while 循环 -n,以及 O(log(n)) 和 O(log(n)) 的示例以及如何找到它们也会很有帮助。

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    System.out.println("Enter number of values in an array : ");
    int n = scan.nextInt();
    int[] arr = new int[n];
    System.out.println("Enter values in an Araay :");
    for (int i = 0; i < arr.length; i++) {
        arr[i] = scan.nextInt();
    }
    int i = 0;
    int j = 0;
    int k = 0;
    while (i < n && j < n) {
        if (arr[i] > arr[i + 1]) {
            j = arr[i];
            k = arr[i + 1];
        } else if (arr[i] < arr[i + 1]) {
            j = arr[i + 1];
            k = arr[i];
        }

        i++;
    }
    System.out.println("the largest element is : " + j);
    System.out.println("the smallest element is : " + k);

}

标签: javaalgorithmdata-structures

解决方案


您的代码无法正常工作,它没有给出正确的值。除非您想从头开始编写代码,否则还有其他方法。看看下面的,其实就是O(n^2)为了排序:

for (int i = 0; i < arr.length; i++) {
    arr[i] = scan.nextInt();
}
Arrays.sort(arr);
System.out.println("min: "  + arr[0] + " max: " + " " + arr[arr.length - 1];

或者,如果您自己实现它很重要,您可以使用 实现它O(n),只循环一次。

int min = arr[0], max = arr[0];
for(int i= 0; i < arr.length; i++) {
  if(arr[i] < min) min = arr[i];
  if(arr[i] > max) max = arr[i];
}
System.out.println("min: " + min + " max: " + max);

推荐阅读