java - 你能告诉我我的代码是否可以找到数组中的最大和最小元素是否足够有效..?
问题描述
代码的效率和时间复杂度?我正在使用 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);
}
解决方案
您的代码无法正常工作,它没有给出正确的值。除非您想从头开始编写代码,否则还有其他方法。看看下面的,其实就是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);
推荐阅读
- python - 在灰度图像上使用自适应阈值的错误
- sqlite - 修剪旧记录后 SQLite 文件变大
- python - 使用 python 新手进行网页抓取
- javascript - 如何使对象的名称成为变量的值?
- c# - 防止来自 URL 的环境路由值在 ASP.NET 中自动添加到 Html.Action 和 Html.ActionLinks
- c# - Xamarin 表单管理闹钟
- powershell - 当它认为有多行时,如何让 PowerShell 将文件作为单行读取?
- python - 将矩阵转换为特定格式的原始字节
- python - 循环遍历文件夹 python
- javascript - Javascript:十六进制到十进制的字符串