Java 如何查找数组中存储的最高和最低数字?
我试图打印数组中存储的最高和最低整数。我可以打印最高的,但对于最低的,我没有得到正确的结果 考虑我下面的两个课程:Java 如何查找数组中存储的最高和最低数字?,java,arrays,Java,Arrays,我试图打印数组中存储的最高和最低整数。我可以打印最高的,但对于最低的,我没有得到正确的结果 考虑我下面的两个课程: 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(
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);
}
}
class ArrayUtilityNew
{
公共静态int findMaxMin(int a[]
{
int n=a.长度;
int n2=n-1;
int minNo=0;
整数计数=0;
int maxNo=0;
对于(int i=0;i你的答案是n^2。要找到最小值和最大值,只需要n阶
换句话说,你只需要看起来是线性的
执行循环,查看列表一次。在执行过程中跟踪最小值和最大值。最初设置最小值=最大值和最大值=最小值。当发现小于最小值的值时,它将成为新的最小值
下面是一个伪代码示例
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]
min=max\u int
最大值=最小值
对于(i=0;imax
最大值=数组[i]
你的方法,即使有效,也是不必要的复杂
- 创建两个变量:
minNo
和maxNo
- 设置
minNo
=Integer.MAX\u值
和maxNo
=Integer.MIN\u值
- 循环遍历数组。如果元素是
=maxNo
,则将其值指定给maxNo
。此外(也不是相反——即,如果,则不是),如果元素是,我认为您的解决方案太复杂了……更好、更有效的解决方案是:
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
int n=a.length;
int minNo=a[0];
int maxNo=a[0];
对于(int i=1;i maxNo){
maxNo=a[i];
}else if(a[i]
还有一种更有效的方法(以代码大小的方式)是使用列表或流,因为您可以用它做一行程序
编辑:关于效率的代码和解释不那么模棱两可多亏了java8中的流式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();
或者作为更高效的三衬板:
Arrays.parallelSort(array);
int min = array[0];
int max = array[array.length -1];
您可以返回min
和max
的int[]
。从两个元素的数组开始,在数组1上循环
结果将是一个数组,第一个元素是最小值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]);
}
我得到了(正如我所期望的)
1此处,带有一个。
2第二个元素为最大值。公共静态无效最小值(int[]arr){
int min=arr[0];
int max=arr[0];
对于(int i=1;iWhy使用列表会更有效?数组访问速度非常快,这里不需要动态长度。您的代码不完整。返回值如何?如何通过返回int的函数返回最小值和最大值?@hexafrance,因为它是一行。但是,数组需要更多行,但速度更快@hexafraction您应该澄清您需要什么样的效率。如果是性能问题或其他问题?@Fouss只需删除“高效”和“列表”两个词,因为您不知道自己在说什么。如何使用minmax()扩展IntStream?OP只是在学习。这不是有点过头了吗?第二种解决方案效率更低。时间复杂度解决方案1:2n->o(n)。时间复杂度解决方案2:o(n*logn)[快速排序]。@netskink是的,我刚开始使用IntStream,但肯定会使用它。它确实缩短了代码。为什么findMinMax()是公共的?是否希望从其他类调用它。静态方法应使用perefix类调用。为什么不使用具有两个属性的数据对象而不是数组?@RomanC“静态方法应使用perefix类调用”如果您静态导入它,或者它位于同一类“main
方法”中,则不会这样做。@AndyTurner-Huh?静态导入仅在Java 7及更高版本中可用,其他用户应使用前缀,即使它是同一类。@RomanC,实际上。与其只发布代码,请添加一些解释,说明代码的作用,这将非常有用。
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
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
}