java求数组的最大值和次大值 (求值函数只能调用一次,但是要返回俩个值)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java求数组的最大值和次大值 (求值函数只能调用一次,但是要返回俩个值)相关的知识,希望对你有一定的参考价值。
如输入:7,2,6,5,3,4
输出:7,6
思路:首先对数组降序排序,然后取其第一个和第二个元素就可以实现。
代码如下:
public class BigNumberpublic static void main(String[] args)
// 定义数组
int[] arrayInt = 7, 2, 6, 5, 3, 4 ;
// 排序
for (int i = 0; i < arrayInt.length - 1; i++)
for (int j = 0; j < arrayInt.length - i - 1; j++)
if (arrayInt[j] < arrayInt[j + 1])
int temp = arrayInt[j];
arrayInt[j] = arrayInt[j + 1];
arrayInt[j + 1] = temp;
// 最大值
int maxNum = arrayInt[0];
// 次大值
int secondNum = arrayInt[1];
System.out.println(maxNum + "," + secondNum);
运行结果:
参考技术A参考代码如下:
import java.util.Arrays;
public class TestArray
public static void main(String[] args)
int[] arr=7,2,1,3,5,6;
TestArray testArray=new TestArray();
String result=testArray.getMaxAndSecond(arr);
System.out.println(result);
private String getMaxAndSecond(int[] arr)
//对数组排序(正序排列)
Arrays.sort(arr);
int length=arr.length;
if(length==0)
return "";
else if(length==1)
return arr[0]+"";
else
return arr[length-1]+","+arr[length-2];
运行结果如下:
?
求最大值和次大值
void main() { int a,b=0,i,j,k,g,z=0; int num[20][10]={{0},{0},{0},{0},{0},{0},{0},{0},{0},{0}}; int Max[20][2]={{0},{0}}; scanf("%d",&a); ////////数据组数 if(a<=0){ exit(0); } for(i=0;i<a;i++){ scanf("%d",&j); ////////每组数据个数 for(k=0;k<j;k++){ scanf("%d",&num[i][k]); } for(j=k-1;j>0;j--){ /////////一组结束冒泡排序 for(g=k-1;g>0;g--){ if(num[i][g]>num[i][g-1]){ b=num[i][g]; num[i][g]=num[i][g-1]; num[i][g-1]=b; } } } Max[i][0]=num[i][0]; while(num[i][z]>=Max[i][0]){ z++; } Max[i][1]=num[i][z]; z=0; } for(i=0;i<a;i++){ printf("%d %d\\n",Max[i][0],Max[i][1]); } }
题目中让我们来求输入数据的最大值和次大值。最开始我是想在数组中直接对其进行排序,然后输出数组的第一个和第二个数。但是,我没有考虑到重复数据的问题,所以我进行了一些改进,想将最大值找出来以后保存入另一个数组,再将最大值与剩下的数进行比较,第一个小于它的数就是次大值。
这个问题解决以后,我发现,输入多组数据时,二维数组的数据比较难处理,需要一个变量保存每一组数据的数据个数,比较麻烦,所以,我就将数据处理直接放到了输入数据之后。输入一组数据,马上进行处理,这样数据个数不需要另外保存,还提高了运行效率
以上是关于java求数组的最大值和次大值 (求值函数只能调用一次,但是要返回俩个值)的主要内容,如果未能解决你的问题,请参考以下文章
leetcode-747-Largest Number At Least Twice of Others(求vector的最大值和次大值)