在数组a中,a[i]+a[j]=a[k],求a[k]的最大值,a[k]max——猎八哥fly
在数组a中,a[i]+a[j]=a[k],求a[k]的最大值,a[k]max。
思路:将a中的数组两两相加,组成一个新的数组。并将新的数组和a数组进行sort排序。然后将a数组从大到小与新数组比较,如果当比较到a中第二个数组时(情况二是第一个数组),仍无满足条件,则返回最大值不存在。
情况一:不考虑i和j相等的情况。此时新数组长度为a.length*(a.length-1)/2;
1 import java.util.Arrays; 2 public class max { 3 public static void main(String[] args) { 4 int[] a ={22,23,11,12,21,46,199}; 5 int k=0,blength; 6 blength = a.length*(a.length-1)/2; 7 int[] b = new int[blength]; 8 for(int i=0;i<a.length;i++){ 9 for(int j=i+1;j<a.length;j++){ 10 b[k] = a[i]+a[j]; 11 k++; 12 } 13 } 14 Arrays.sort(a); 15 Arrays.sort(b); 16 for(int i=a.length-1;i>=0;i--){ 17 if(Arrays.binarySearch(b, a[i])>=0){ 18 System.out.println(a[i]); 19 break; 20 } 21 if(i==1){ 22 System.out.println("最大值不存在"); 23 } 24 } 25 26 } 27 }
情况二:考虑i和j相等的情况。此时新数组长度为blength = a.length*(a.length+1)/2;
1 import java.util.Arrays; 2 public class max2 { 3 public static void main(String[] args) { 4 int[] a ={22,23,11,12,21,46,199}; 5 int k=0,blength; 6 blength = a.length*(a.length+1)/2; 7 int[] b = new int[blength]; 8 for(int i=0;i<a.length;i++){ 9 for(int j=i+1;j<a.length;j++){ 10 b[k] = a[i]+a[j]; 11 k++; 12 } 13 } 14 for(int i=blength-a.length,j=0;i<blength;i++,j++){ 15 b[i] = a[j]*2; 16 } 17 Arrays.sort(a); 18 Arrays.sort(b); 19 for(int i=a.length-1;i>=0;i--){ 20 if(Arrays.binarySearch(b, a[i])>=0){ 21 System.out.println(a[i]); 22 break; 23 } 24 if(i==0){ 25 System.out.println("最大值不存在"); 26 } 27 } 28 } 29 }