和为定值的多个数

给定N个数,从中找出若干个数,使得这些数的和等于sum。

TwoSum

void TwoSum(int data[], unsigned int length, int sum)
{
    std::sort(data, data + length);
    int begin = 0;
    int end = length - 1;
    while (begin < end) {
        int cur_sum = data[begin] + data[end];
        if (cur_sum == sum) {
            printf("%d %d\n", data[begin], data[end]);
            begin++;
            end--;
        } else {
            if (cur_sum < sum)
                begin++;
            else
                end--;
        }
    }
}

MultiSum

0-1背包问题。

void MultiSum(int data[], unsigned int length, int sum, bool flag[], int flag_size)
{
    if (length <= 0 || sum <= 0)
        return;
    if (sum == data[length - 1]) {
        for (int i = 0; i < flag_size; i++) {
            if (flag[i] == 1)
                printf("%d+", data[i]);
        }
        printf("%d\n", data[length - 1]);
    }
    flag[length - 1] = 1;
    MultiSum(data, length - 1, sum - data[length - 1],flag, flag_size);
    flag[length - 1] = 0;
    MultiSum(data, length - 1, sum,flag, flag_size);
}

参考资料:

寻找和为定值的多个数

时间: 2024-10-08 00:19:35

和为定值的多个数的相关文章

从数组中选出和等于固定值的n个数(JavaScript实现)

现实生活中的问题,可能会抽象为这样一种数据模型: 从一个数组中挑选出几个数,让这几个数相加的和为指定的值. 大多数读者应该有过网购的经历,网购一般会有个凑单功能,假如读者买了70元的商品,但是必须满100元才能包邮,这时系统会自动推荐一些商品,加起来差不多就100块钱了. 系统如何确定推荐哪些商品呢?这其实就是刚刚提到的模型,我们可以把热销商品的价格放到一个数组中,然后利用算法,找出数组中哪些价格的和为30元. 废话少说,小菜给大家分享一个JavaScript版本的算法实现. 算法代码: 1 f

寻找和为定值的多个数

1.首先看看简单的,寻找和为定值的2个数求解 采用HASH方式就可以求解. 具体参考这个文章: 寻找和为定值的2个数 2.那寻找和为定值的多个数怎么求解了 #include <stdio.h> #include <stdlib.h> /*原题:输入两个整数 n 和 m,从数列1,2,3.......n 中随意取几个数,使其和等于 m ,要求将其中所有的可能组合列出来 修改之后改为:对任意一个数组寻找m个数,使其和为指定的值*/ void findSubSum(int* a, int

计算子序列和是定值的子序列个数

题目如下: Counting Subsequences Time Limit: 5000 MSMemory Limit: 65536 K Description "47 is the quintessential random number," states the 47 society. And there might be a grain of truth in that. For example, the first ten digits of the Euler's const

编程之法:面试和算法心得(寻找和为定值的多个数)

内容全部来自编程之法:面试和算法心得一书,实现是自己写的使用的是java 题目描述 输入两个整数n和sum,从数列1,2,3.......n 中随意取几个数,使其和等于sum,要求将其中所有的可能组合列出来. 分析与解法 解法一 注意到取n,和不取n个区别即可,考虑是否取第n个数的策略,可以转化为一个只和前n-1个数相关的问题. 如果取第n个数,那么问题就转化为"取前n-1个数使得它们的和为sum-n",对应的代码语句就是sumOfkNumber(sum - n, n - 1): 如果

编程之法section II: 2.2 和为定值的两个数

====数组篇==== 2.2 求和为定值的两个数: 题目描述:有n个整数,找出其中满足两数相加为target的两个数(如果有多组满足,只需要找出其中一组),要求时间复杂度尽可能低. 解法一: 思路:开散列映射,空间换时间, 查找耗时o(n) Writer: zzq Function: 求和为定值的两个数. 方法一: 开散列映射(哈希表). 1) 用哈希表Hashmap先把数组中的数字和对应的下标进行存储,(键,值)=(具体数值,对应下标): 2) 遍历数组,对loss=target-nums[

算法笔记_037:寻找和为定值的两个数(Java)

目录 1 问题描述 2 解决方案 2.1 排序夹逼法   1 问题描述 输入一个整数数组和一个整数,在数组中查找两个数,满足他们的和正好是输入的那个整数.如果有多对数的和等于输入的整数,输出任意一对即可.例如,如果输入数组[1,2,4,5,7,11,15]和整数15,那么由于4+11 = 15,因此输出4和11. 2 解决方案 2.1 排序夹逼法 首先将整数数组,使用合并排序进行从小打到的排序,然后对这个排完序的数组从两头往中间遍历,一旦出现两个数的和等于输入的那个整数,则立即输出这两个数,并结

【剑指offer学习】求和为定值的两个数(拓展)

接着上面一篇文章: http://blog.csdn.net/u013476464/article/details/40651451 接下来我们拓展一下题目,如果数组是乱序的,并且规定数组中的元素所有为非负整数,相同给定一个数sum,在数组中找出随意两个数,使二者的和为sum. 分析: 由于题目中限定了数组中的元素为非负整数,因此我们能够用哈希数组,开辟一个长度为sum的bool数组B[sum],并所有初始化为false,对数组A进行一次遍历,假设当前的元素A[i]大于sum,则直接跳过,否则,

[算法]寻找和为定值的多个数

2010 年中兴面试题 编程求解: 输入两个整数n 和m,从数列1,2,3.......n 中随意取几个数, 使其和等于m ,要求将其中所有的可能组合列出来. // 21 题递归方法 //[email protected] July && yansha //July.yansha,updated. #include<list> #include<iostream> using namespace std; list<int>list1; void fin

寻找和为定值的两个数

1. 题目描述 给定一个数组(无序或者有序,两种情况都要考虑),找出和为M的两个数.最多时间复杂度能有多少? https://github.com/julycoding/The-Art-Of-Programming-By-July/blob/master/ebook/zh/02.02.md 2. 数组有序--两端指针扫描法 数组有序的情况,在时间复杂度上我们就省去了排序的O(NlogN). 我们使用两端指针扫描法是比较简单的,时间复杂度为O(N), 空间复杂度为O(1).如下图所示: 首先我们在