我正在尝试打印存储在数组中的最高和最低整数。我能够打印最高但是最低的我没有得到正确的结果。
考虑下面的两个课程:
class ArrayUtilityNew
{
public static int findMaxMin(int a[])
{
int n=a.length;
int n2=n-1;
int minNo=0;
int count=0;
int maxNo=0;
for(int i=0;i<n;i++)
{
for(int j=0;j<n;j++)
{
if(a[i]<a[j])count++;
}
//This gives the highest no. if the count is 0
if(count==0)
{
maxNo=a[i];
}
//Lowest no. shall be gained here if the count is greater
// than the no of elements in the array
// if(count>n)
// {
// minNo=a[i];
// }
count=0;
}
return maxNo;
}
}
class ArrayInteractionsNew
{
public static void main(String arr[])
{
int one[]={3,20,1999,2,10,8,999};
int answer=ArrayUtilityNew.findMaxMin(one);
System.out.println("The highest no in the array is "+answer);
}
}
如果第二个背后的逻辑不正确还是存在其他错误?
如何纠正?
答案 0 :(得分:4)
您可以返回int[]
min
和max
。从一个包含两个元素的数组开始,遍历数组 1 ,如
public static int[] findMinMax(int[] a) {
int[] result = { Integer.MAX_VALUE, Integer.MIN_VALUE };
for (int i : a) {
result[0] = Math.min(result[0], i);
result[1] = Math.max(result[1], i);
}
return result;
}
结果将是一个数组,第一个元素是最小值 2 。然后测试一下,
public static void main(String[] args) {
int[] arr = { 3, 20, 1999, 2, 10, 8, 999 };
int[] minMax = findMinMax(arr);
System.out.printf("%s: min=%d, max=%d%n",
Arrays.toString(arr), minMax[0], minMax[1]);
}
我得到(正如我所料)
[3, 20, 1999, 2, 10, 8, 999]: min=2, max=1999
1 此处,for-each loop。
2 第二个元素是最大值。
答案 1 :(得分:3)
我认为你的解决方案过于复杂......一个更好,更有效的解决方案就是:
int n=a.length;
int minNo=a[0];
int maxNo=a[0];
for(int i=1;i<n;i++)
{
if(a[i] > maxNo) {
maxNo = a[i];
} else if(a[i] < minNo) {
minNo = a[i];
}
}
// do whatever you want with maxNo and minNo
同样更有效(以代码大小方式)的方式是使用列表或流,因为你可以用它做单行。
编辑:较少模糊的代码和有关效率的解释
答案 2 :(得分:1)
你的答案是n ^ 2。要查找最小值和最大值,只需要订购n。
换句话说,你只需要看起来是线性的。
执行一次查看列表的循环。随时跟踪最小值和最大值。最初设置min = maxvalue和max = minvalue。当您发现小于min的值时,它将成为新的最小值。
以下是伪代码中的示例。
min = max_int
max = min_int
for (i=0; i < array.length; i++)
if array[i] < min
min = array[i]
if array[i] > max
max = array[i]
答案 3 :(得分:0)
如果它的方法有效,你的方法就会不必要地复杂化。
minNo
和maxNo
。 minNo
= Integer.MAX_VALUE
和maxNo
= Integer.MIN_VALUE
。>= maxNo
,请将其值指定给maxNo
。另外(不是 - 而不是else if
!),如果元素是<= minNo
,则将其值分配给minNo
。minNo
和maxNo
将被正确分配。答案 4 :(得分:0)
由于java8中的Streaming API,这是一个双线程:
int[] array = new int[] {5,7,2,9,10,24,3,23};
int min = IntStream.of(array).min().getAsInt();
int max = IntStream.of(array).max().getAsInt();
或者作为一种更有效的3-liner:
Arrays.parallelSort(array);
int min = array[0];
int max = array[array.length -1];
答案 5 :(得分:0)
public static void minMax(int []arr){
int min = arr[0];
int max = arr[0];
for(int i=1; i<arr.length; i++){
min = Math.min(min,arr[i]);
max = Math.max(max,arr[i]);
}
//do whatever you want with the max and min
}