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

求数组中两两相加等于某个数的组合中种数
   下面提两种解法:
    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);
}

运行结果如下:
     
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值