java 数组中两两相加等于某个数的组合种数 蛮力解法 排序解法
2017-05-03 22:45
330 查看
求数组中两两相加等于某个数的组合中种数
下面提两种解法:
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
; for (int i = 0; i <n; i++) { array[i]=scanner.nextInt(); } method1(array,number); method2(array,number); }
运行结果如下:
下面提两种解法:
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
; for (int i = 0; i <n; i++) { array[i]=scanner.nextInt(); } method1(array,number); method2(array,number); }
运行结果如下:
相关文章推荐
- java编程:从数组(1,2,4,6,9)中列出所有相加等于20的组合,例如9+9+2=20
- java实现 数组中两个元素相加等于指定数的所有组合
- 数组中两两相加等于20的组合种数
- Java 找到数组中两个元素相加等于指定数的所有组合
- 求数组中两两相加等于某个数的组合种数
- 求数组中两两元素相加等于20的组合种数
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合
- 找出整数数组中两两相加等于key的整数对
- 笔试题:写一个有序整数数组两两之和等于某个数所有组合
- (笔试中的题目)一个已经排序好的数组找到两个数字相加等于一个给定的数
- 设计一个算法找到数组中两个元素相加等于指定数的所有组合
- [面试题]设计一个算法找到数组中两个元素相加等于指定数的所有组合
- http://www.dewen.net.cn/q/15749/PHP求数组值相加(可重复)等于某值的所有组合
- leetcode-java.T001_TwoSum 给定一个整数数组,找出其中两个数满足相加等于你指定的目标数字
- java求子集和,给定数组求这个数组中某些数字相加等于某个值的所有可能集合
- 求数组中两两相加为某个数字的组合数
- 有一个整数数组(包括正数 负数 和0),给定一个M值,要求数组中的一个或多个值相加的和等于M,有多少种组合?
- java 无序数组中两个元素相加等于指定的数 o(n)
- Java数组排序总结(冒泡,选择,插入,希尔)
- 数组排序汇总--[Java]