java 数组中两两相加等于某个数的组合种数 蛮力解法 排序解法
来源:互联网 发布:过山车大亨 mac 中文 编辑:程序博客网 时间:2024/05/29 02:41
求数组中两两相加等于某个数的组合中种数
下面提两种解法:
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向前移动一位
运行结果如下:
下面提两种解法:
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);}
运行结果如下:
0 0
- java 数组中两两相加等于某个数的组合种数 蛮力解法 排序解法
- 求数组中两两相加等于某个数的组合种数
- 数组中两两相加等于20的组合种数
- 找出整数数组中两两相加等于key的整数对
- 在一个数组中找到等于某个数的组合
- leetcode_454. 4Sum II 4个数组求和,返回和为0的所有情况的种数 数组两两相加存在map中
- java小程序,两数互换的两种解法。
- 笔试题:写一个有序整数数组两两之和等于某个数所有组合
- LintCode 数飞机的两种解法
- java实现 数组中两个元素相加等于指定数的所有组合
- 有序数组求两个数的和为某个值O(n)解法
- 求数组中两两元素相加等于20的组合种数
- 第十四题:在一个排序数组中查找一对数,使得其和等于某个值
- java 求数组中重复元素最多的数 空间换时间解法 Map映射表法
- 【面试题】求两个有序数组两两相加的值最小的K个数
- 算法-求两个有序数组两两相加的值最小的K个数
- 求两个有序数组两两相加的值最小的K个数
- 求两个有序数组两两相加的值最小的K个数
- SpringBoot非官方教程 | 第四篇:SpringBoot 整合JPA
- POJ 1088 滑雪
- 【Java】数据库事务处理的特性:ACID
- json回调函数没效果
- 乱码问题
- java 数组中两两相加等于某个数的组合种数 蛮力解法 排序解法
- SpringBoot非官方教程 | 第五篇:springboot整合 beatlsql
- jQuery2
- Js原生Ajax和Jquery的Ajax
- Oracle数据库学习
- Scala入门到精通——第六节:类和对象(一)
- SpringBoot非官方教程 | 第六篇:springboot整合mybatis
- 抽象类的特点总结
- ISP基本框架及算法介绍