牛骨文教育服务平台(让学习变的简单)
博文笔记

java 数组中两两相加等于某个数的组合种数 蛮力解法 排序解法

创建时间:2017-05-03 投稿人: 浏览次数:940
求数组中两两相加等于某个数的组合中种数
   下面提两种解法:
    1.蛮力算法:时间复杂度为O(n^2)
    2.排序法:
       时间复杂度为O(logn) 对数组先进行排序,定义begin和end分别指向数组的
       第一个元素和最后一个元素,分为以下三种情况:
         1:若array[begin]+array[end]<某个数(number)  则 begin++,即为:begin向后移动一位
         2:若array[begin]+array[end]>某个数(number)  则end--,即为:end向前移动一位
         3:若array[begin]+array[end]=某个数(number)  则begin++,end--;即为:begin向后移动一位,end向前移动一位
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);	}

运行结果如下:
     
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。