数组中求俩个数,三个数,K个数和为给定sum
来源:互联网 发布:网络赚钱的门路和技巧 编辑:程序博客网 时间:2024/06/06 19:30
给定一个数组,一个数sum,在数组中快速找到俩个数和为sum。
给定一个数组,一个数sum,在数组中快速找到三个数和为sum。
给定一个数组,一个数sum,求数组中可以找到多少种组合使得和为sum。不限制组合里面数的个数。
package com.liu.common;/** * Created by kaizige on 2017/8/5. */import java.util.*;public class Main{ public int[]a; public int n; public int sum;//和 public int[]dp;//动态规划数组,求K个数和为sum时使用 public int total;//保存数目对的结果 public int[] two=new int[2];//求俩个数和为sum时使用 public int[] three =new int[3];//求三个数和为sum时使用 public void read(){ Scanner scanner=new Scanner(System.in); n=scanner.nextInt(); sum=scanner.nextInt(); a=new int[n]; dp=new int[sum+1]; for(int i=0;i<n;i++){ a[i]=scanner.nextInt(); } } //求数组中和为sum的任意k个数的组合有多少种 public void kSum(){ dp[0]=1; for(int i=0;i<n;i++){ for(int j=sum;j>=a[i];j--){ dp[j]=dp[j]+dp[j-a[i]]; } } total=dp[sum]; } //在数组中快速找到俩个数和为给定sum,找到一组就停止。求之前要求先对数组排序 public void twoSum(){ int i=0; int j=n-1; while(i<j){ if(a[i]+a[j]==sum){ two[0]=a[i]; two[1]=a[j]; break; } if(a[i]+a[j]<sum){ i++; }else{ j--; } } }//在数组中快速找到三个数和为给定sum,找到一组就停止。求之前要求先对数组排序 public void threeSum(){ for(int i=0;i<n;i++){ int temp=a[i]; swap(i,0);//交换数组中下标为i和0的俩个数 int start=1; int end=n-1; while(start<end){ if(a[start]+a[end]==sum-temp){ three[0]=temp; three[1]=a[start]; three[2]=a[end]; return ; }else if(a[start]+a[end]>sum-temp){ end--; }else { start++; } } swap(i,0); } } private void swap(int i,int j){ int temp=a[i]; a[i]=a[j]; a[j]=temp; } public static void main(String[] args) { //俩个数和测试// Main main=new Main();// main.read();// Arrays.sort(main.a);// main.twoSum();// System.out.println(Arrays.toString(main.two)); //k个数和测试// Main main=new Main();// main.read();// main.kSum();// System.out.println(main.total); //三个数和测试 Main main=new Main(); main.read(); Arrays.sort(main.a); main.threeSum(); System.out.println(Arrays.toString(main.three)); }}
阅读全文
1 0
- 数组中求俩个数,三个数,K个数和为给定sum
- 判断数组里面的若干个数的和是否为给定的数
- 在数组找到和为给定值的多个数
- 求一组数中的的和为给定值的三个数(3sum)
- 求数组中和为给定数的所有组合的个数
- 找出给定数组或文件中最小的k个数
- 给定一个无序数组,找到其中最小的K个数
- 51NOD 1090 三个数和为0 1267 4个数和为0 二分答案
- 在给定数组中查找两个数的和为给定值sum
- 1. Two Sum 给定一个数组和一个数,输出两个和为给定数的数组元素的下标
- 求用1,2,5这三个数不同个数组合的和为100的组合个数
- 求用1,2,5这三个数不同个数组合的和为100的组合个数
- 求出用1,2,5这三个数不同个数组合的和为1000的组合个数
- 算法总结(3)--k-Sum求和,找到和为定值的多个数
- 用1 2 5三个数不同个数的组合的和为100的组合
- 用1,2,5这三个数相加(可重复)和为100的个数
- hdu4982 是否存在k个数和为n并且存在其中k-1个数和为完全平方数的情况
- 【DP】添加n个数+-,统计和为S的方案数【494. Target Sum】
- 决策树相关知识小结
- 顺序表应用4:元素位置互换之逆置算法
- 蓝牙音响升压芯片 内置MOS 可升9V FP6298
- jar包执行后程序资源无法读取的解决方案
- 自定义菜单栏---卫星菜单栏
- 数组中求俩个数,三个数,K个数和为给定sum
- leetcode--Implement Stack using Queues
- gradle 学习记录1--mac
- 动态规划入门-最大子段
- 网站要上线了,问问自己这15个问题再做决定
- GitHub开源推荐系统项目Surprise的安装和使用
- /usr/bin/ld: cannot find -l* 错误的解决方法
- 前端程序员必知的30个Chrome扩展
- 部署zabbix客户端报错信息