1. 程式人生 > >java 陣列中兩兩相加等於某個數的組合種數 蠻力解法 排序解法

java 陣列中兩兩相加等於某個數的組合種數 蠻力解法 排序解法

package datastruct.usearray;import java.util.Arrays;import java.util.Scanner;public class GetResult20OfTwoEle { //方法一:蠻力演算法 private static void method1(int array[],int number) { int count=0;//兩兩相加等於number的組合種數 System.out.println("方法一:"); for (int i = 0; i < array.length-1; i++) { for (int j = i+1; j < array.length; j++) { if (array[i]+array[j]==number) { count++; System.out.println("第"+count+"種"+": "+array[i]+"+"+array[j]+"=20"); } } } System.out.println("等於20的組合共有"+count+"種"); } private static void method2(int array[],int number) { Arrays.sort(array);//對陣列進行排序 int begin=0; int end=array.length-1; int count=0;//兩兩相加等於number的組合種數 System.out.println("方法二:"); while (begin!=end) { if (array[begin]+array[end]<number) { begin++; //begin向後移動一位 }else if (array[begin]+array[end]>number) { end--; //end向前移動一位 }else { count++; System.out.println("第"+count+"種"+": "+array[begin]+"+"+array[end]+"=20"); begin++; end--; } } System.out.println("等於20的組合共有"+count+"種"); } public static void main(String[] args) { Scanner scanner=new Scanner(System.in); System.out.println("請輸入元素的個數:"); int n=scanner.nextInt(); System.out.println("請輸入求解兩個元素相加的數值:"); int number=scanner.nextInt(); System.out.println("輸入"+n+"個數組元素:"); int array[]=new int[n]; for (int i = 0; i <n; i++) { array[i]=scanner.nextInt(); } method1(array,number); method2(array,number); }
執行結果如下: