怎么求数组中,加和最大的两个数

pirwh 2016-11-15 11:09:05
需求是 一个整数数组中有10个数,求加和最大的两个数分别是多少?
我写的代码算到是最大的那个数与自己相加的结果,不是最大的两个数相加,而且求不出那两个数是多少
代码如下:
public class add
{
public static void main(String args[])
{
int a[]= new int [] {84,40,16,3,10,49,28,76,94,100};
int n;
int x=a[0];
int i;
int y=a[0];
int k = x+y;

for(n=0;n<=9;n++)
{
for(i=0;i<=9;i++)
if(k<(a[n]+a[i]))
k=a[n]+a[i];
}
System.out.println(k);
...全文
653 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
NewshiJ 2016-12-02
  • 打赏
  • 举报
回复
我觉得还是先排序比较稳一点
颐牟权月 2016-12-02
  • 打赏
  • 举报
回复

Integer[] datas = new Integer[]{84,40,16,3,10,49,28,76,94,100};
        if (datas != null && datas.length > 1) {
            List<Integer> results = Arrays.asList(datas);
            Collections.sort(results);
            System.out.println("maxNum1:" + results.get(results.size() -1));
            System.out.println("maxNum2:" + results.get(results.size() -2));
        }
控制台输出 maxNum1:100 maxNum2:94
朔北冥 2016-12-02
  • 打赏
  • 举报
回复
快速选择问题:直接遍历就行
逗泥丸的平方 2016-11-29
  • 打赏
  • 举报
回复
额 这不就是查找问题吗..... 或者你冒泡两轮也可以
soton_dolphin 2016-11-29
  • 打赏
  • 举报
回复
先以升序排列,再算最后两个元素的和
  • 打赏
  • 举报
回复

	public static void main(String[] args) {
		int[] arr=new int[]{3,4,2,9,6};		
		sort(arr);
	}
	
	/**
	 * 排序
	 * @param arr
	 */
	public static void sort(int[] arr){
		StringBuilder sb=new StringBuilder();
		for(int ele:arr){
			sb.append(ele).append(",");
		}
		System.out.println("数组为:"+sb.deleteCharAt(sb.length()-1));
		int len=arr.length;
		Arrays.sort(arr);
		System.out.println(arr[len-1]+"和"+arr[len-2]+"相加的和最大,为:"+(arr[len-1]+arr[len-2]));
		
	}
小灰狼 2016-11-16
  • 打赏
  • 举报
回复
public static void main(String[] args){
		int[] array = new int[]{
				4, 2, 6, 5, 9, 2, 6, 8, 1, 6, 9, 11, 33
		};
		// 最大数
		Integer a = null;
		// 次大数
		Integer b = null;
		
		if(array.length < 2){
			System.out.println("数组太小,无法计算");
			return;
		}
		
		for(int i : array){
			if(a == null){
				a = i;
				continue;
			}
			if(b == null){
				b = i;
				continue;
			}
			
			if(b > a){
				Integer tmp = a;
				a = b;
				b = tmp;
			}
			
			if(i > a){
				// 找到最大值
				b = a;
				a = i;
			}else if(i > b){
				// 找到次大值
				b = i;
			}
		}
		
		System.out.println("最大值 = " + a);
		System.out.println("次大值 = " + b);
		System.out.println(a.intValue() + b.intValue());
	}
小灰狼 2016-11-16
  • 打赏
  • 举报
回复
把数组里最大和次大的两个数找出来,再求和不就完事了? 一次遍历即可 当然要考虑一下数组中可能有两个值相同的数
SkyMath1024 2016-11-16
  • 打赏
  • 举报
回复
public class Main {

	public static void main(String[] args) {
		
		int a [] = {84,40,16,3,10,49,28,76,94,100};
		getTwoLargestNum(a);

	}
	
	/**
	 * @param a 传入数组
	 */
	public static void getTwoLargestNum(int []a){
		
		int largestNum = 0;//最大数标志
		int subNum = 0;//第二大数标志
		
		if (a[0] > a[1]) {//初始化最大的两个数
			largestNum = a[0];
			subNum = a[1];
		}else {
			largestNum = a[1];
			subNum = a[0];
		}
		
		for (int i = 2; i < a.length; i++) {//从第3个数开始循环,不断比较,然后刷新最大两个数的值
			if (a[i] > largestNum) {
				subNum = largestNum;//最大的数地位下滑,变第二大
				largestNum = a[i];
			}else if (a[i] > subNum) {
				subNum = a[i];
			}
		}
		
		System.out.println("最大数:"+largestNum);
		System.out.println("第二大数:"+subNum);
		
	}

}
  • 打赏
  • 举报
回复
恩,可以先排序
valentinath1989 2016-11-16
  • 打赏
  • 举报
回复
可以先排序啊,这样就很明确了
pirwh 2016-11-16
  • 打赏
  • 举报
回复
有没有一种方法是设这两个数为X和Y,然后循环X+Y等于数组中的任意两个数相加?
qq_36707579 2016-11-16
  • 打赏
  • 举报
回复
在if条件里加一个&&n!=i。 或者,排序,然后把第一个数和第二个数相加

62,628

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧