问题描述
代码的效率和时间的复杂性?我正在运行if和else语句的while循环,以查找最大和最小的整数,而不是for循环。我只想知道我的代码是否足够有效,或者我需要使用for循环,我还想知道是否存在任何快捷方式查找像for循环这样的时间复杂度-它是n ^ 2,而循环-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);
}
解决方法
您的代码比应该的要复杂。不仅如此,它似乎无法正常工作。
下面介绍一种找到最小/最大数量的方法
import java.util.Scanner;
public class MyClass{
public static int findMax(int[] array){
int max = int[0];
for(int i = 1; i < array.length; i++){
if(array[i] > max){
max = array[i];
}
}
return max;
}
public static int findMin(int[] array){
int min = int[0];
for(int i = 1; i < array.length; i++){
if(array[i] < min){
min = array[i];
}
}
return min;
}
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();
}
System.out.println("Max: " + findMax(arr));
System.out.println("Min: " + findMin(arr));
}
}
,
您的代码无法正常工作,没有提供正确的值。
除非您想从头开始编写所有代码,否则还有其他方法。
看一下以下内容,实际上是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];
OR (如果重要的是您自己实现),则可以使用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);