數列中和為定值的所有組合
問題描述
輸入兩個整數 n 和 m,從數列1,2,3……n中隨意取幾個數,使其和等於 m ,要求將其中所有的可能組合列出來。
演算法
設該演算法為f(m, n),返回一個數組集合r
則f(m, n-1)返回集合r1
且f(m-n, n-1)返回集合r2
在r2中的每個陣列中加入元素n,得到r3
則r = r1 + r3
終止條件是n <= 0或m <= 0
演算法思路
利用分治的思想,縮小問題規模,迭代解決問題
m是定值,n是標誌規模的量,所以希望每次縮小n的規模(n-1)
那如何從n-1規模的問題答案中得到n規模的答案呢?
首先,(m, n-1)的答案是(m, n)的答案一個子集
其次,(m, n)的答案相對(m, n-1)的答案,多出了包含元素n的所有組合
如何求上述包含元素n的所有組合?只需要求出所有不含n且和為m-n的組合,然後各加入一個n既可
要求不含n,所以問題規模定義為n-1,要求和為m-n,所以引數定為m-n
綜上,得以上演算法
相關推薦
數列中和為定值的所有組合
問題描述 輸入兩個整數 n 和 m,從數列1,2,3……n中隨意取幾個數,使其和等於 m ,要求將其中所有的可能組合列出來。 演算法 設該演算法為f(m, n),返回一個數組集合r 則f(m, n-1)返回集合r1 且f(m-n, n-1)返回集合r2 在r2中的每個陣列中
使用java列舉所有給定陣列中和為定值的組合
import java.util.Arrays; public class SolveProb { static int[] arr = new int[100]; static int index = 0;// 記錄當前 public SolvePr
C++求陣列中和為定值的組合
回溯法求矩陣中和為定值的組合 題目描述: 給定整數陣列A,求和為sum的所有組合,並輸出。還有一種類似題目是,求所有組合的個數。 要求:輸出子陣列不能改變元素在原始陣列中的相對位置。 題目要求不能改變相對位置表示不能對原始陣列排序。 C++實現如下:
Java 列舉陣列中任意元素和為定值的組合
import java.util.Arrays; /** * 列舉陣列中任意元素和為定值的組合 */ public class SolveProb { // Arrays.sort(arr); static int[] flag = new int[1
回溯法求解陣列中和為固定值的所有元素集合
一、前言 本文參考自http://blog.csdn.net/u012462822/article/details/51193689,找出陣列中和為固定值的所有元素集合,常用的思路是先進行排序,之後再用回溯的方法不斷嘗試所有可能集合。以下先用快速排序(寫得有點
[程序猿面試題精選100題]10.排序數組中和為給定值的兩個數字
連續正數序列 ati 試題 連續 tails blog div 劍指offer ott 劍指Offer之和為S的兩個數字 劍指Offer之和為S的連續正數序列 擴展(1):輸入一個數組,推斷這個數組中是
編程之法:面試和算法心得(尋找和為定值的多個數)
arch 全部 col static 多個 ++ som ava sta 內容全部來自編程之法:面試和算法心得一書,實現是自己寫的使用的是java 題目描述 輸入兩個整數n和sum,從數列1,2,3.......n 中隨意取幾個數,使其和等於sum,要求將其中所有的可能組合
和為定值的m個數
pos col list spa num span int false code 和為定值的m個數 np 問題(時間復雜度o(2**n)) code1: 暴力遞歸 解決 只有正數的情況 1 class Solution { 2 private Li
編程之法section II: 2.2 和為定值的兩個數
cpp iterator 尋找 AI 存在 while ios last static ====數組篇==== 2.2 求和為定值的兩個數: 題目描述:有n個整數,找出其中滿足兩數相加為target的兩個數(如果有多組滿足,只需要找出其中一組),要求時間復雜度盡可能低。
一個排好序的數組,找出兩數之和為x的所有組合【雙指針】
pac In const include int mes 所有 組合 兩數之和 #include <bits/stdc++.h> using namespace std; const int N = 1e6,INF = 0x3f3f3f3f; int a[N];
計算一個N個選項中和為X的所有組合數
下面就是一個最近微信上流傳的一個測試: 假如5塊錢可以買一個女朋友,你會買什麼樣的?下面是每項的價格 有錢-4元, 長得好看-3元, 會做飯-3元, 忠誠-3元, 處女-2元, 溫柔-2元, 活潑可愛-2元, 大長腿-1元, 聰明-1元, 胸大-1元 --計算從
和為定值的連續正數序列
思路 有了陣列中和為定值的兩個數字的經驗,我們也考慮用兩個數small和big分別表示序列的最小值和最大值。首先把small初始化為1,big初始化為2.如果從small到big的序列的和大於s,我們可以從序列中去掉較小的值,也就是增大small的值。如果從smal
百詞斬2019校招題-NYOJ 1058 尋找和為定值的若干個數
百詞斬2019校招題 NYOJ 1058 部分和問題: 尋找和為定值的若干個數 給定整數a1、a2、a3、…、an,判斷是否可以從中選出若干個數,使得它們的和等於k(k任意給定,且滿足-10^8 <= k
找出和為定值的數對
輸入n ( n<= 100,000)個整數,找出其中的兩個數,它們之和等於整數m(假定 肯定有解)。題中所有整數都能用 int 表示 解法一: 1) 將陣列排序,複雜度是O(n×log(n)) 2) 查詢的時候,設定兩個變數i和j,i初值是0,j初值是n-
18. 4Sum(求陣列中和為指定值的4個數)
Given an array S of n integers, are there elements a, b, c, and d in S such that a + b + c + d = targ
尋找和為定值的多個數 (0-1 揹包)
題目描述 輸入兩個整數n和sum,從數列1,2,3.......n 中隨意取幾個數,使其和等於sum,要求將其中所有的可能組合列出來。 分析與解法 每個數都存在被選擇或不被選擇兩種可能,分類遞迴即可(分治思想) package main import "fmt" func S
程式設計師程式設計藝術-----第五章-----尋找滿足和為定值的兩個或多個數
程式設計師程式設計藝術:第五章、尋找和為定值的兩個或多個數 前奏 希望此程式設計藝術系列能給各位帶來的是一種方法,一種創造力,一種舉一反三的能力。本章依然同第四章一樣,選取比較簡單的面試題,恭祝各位旅途愉快。同樣,有任何問題,歡迎不吝指正。謝謝。第一節、尋找和為定
求二叉樹中和為給定值的路徑
題目:輸入一棵二叉樹和一個整數,打印出二叉樹中節點值的和為輸入整數的所有路徑。從樹的根節點開始往下一直到葉節點所經過的節點形成一條路徑。
《程式設計之法》2.2尋找和為定值的兩個數
題目描述:輸入一個整數陣列和一個整數,在陣列中查詢一對數,滿足它們的和正好等於輸入的那個整數,並輸出任一一對值。 解法一:直接窮舉:雙層迴圈,複雜度為O(n^2); #include <iostream> using namespace std; void Di
找出排序陣列中和為給定值的兩個數字
題目:輸入一個已經按升序排序過的陣列和一個數字,在陣列中查詢兩個數,使得它們的和正好是輸入的那個數字。要求時間複雜度是O(n)。如果有多對數字的和等於輸入的數字,輸出任意一對即可。 例如:A[]={1,2,3,4,5,6,7,8,9}, sum = 15,輸出