有乙個陣列,要求用程式輸出所有和為10的組合(10也包括在內)
遞迴,回溯
對於其中乙個數ni,其和為某個數的組合可以分解為兩個互不相干的子問題:
1、在0到i-1的範圍內尋找和為(當前和)的組合
2、(當前和)=(當前和)-(ni),然後在0到i-1的範圍內尋找和為(當前和)的組合
為了列印遍歷路徑,設定了乙個輔助vector,每次遇到情況2的時候把這個數存放在vector中,情況2遍歷完後,再pop出,繼續找情況1
廢話就這麼多,上碼:
#include #includeusing
namespace
std;
vector
path;
void printvector(vector&path)
}void findsum10(int* array,int sum,int
pos)
if (sum==0
)
path.push_back(array[pos]);
//情況2
findsum10(array,sum-array[pos],pos-1
); path.pop_back();
findsum10(array,sum,pos-1);//
情況1}
intmain()
;
int sum=10
; findsum10(a,sum,9);
system(
"pause");
}
一道百度面試題
給出乙個整型陣列num,對其中的每個元素,輸出在它左側且比它小的最近元素,要求時間複雜度為o n 例如int num 2無左側最近元素 4左側最近的是2 1沒有 3左側最近的是1.分析 建立乙個棧,然後將陣列中的元素從右至左依次壓入棧中。對每個元素,入棧前先檢查棧頂元素是否比它大,若是的話,則該元素...
一道百度面試題
下面這段 是把中英文混合字串 漢字用兩個位元組表示,特點是第乙個位元組的最高位為1 中的大寫字母轉化為小寫字母,請找出其中的bug,注意各種異常情況。for char piterator szword piterator 0 piterator else if piterator a piterat...
百度一道面試題
我這裡複製的是原話,當然順序是不一定的,很多拿到題目第一反應就是用map,當然可以解決,但是效率不高。還有人覺得應該用演算法 我是沒想到用啥演算法好.還有覺得應該先排序.還有覺得用位圖.bitmap 等等方法!我都覺得麻煩,思維方式就是,從節省時間考慮,從陣列來看,我們都得遍歷一次陣列裡面的元素,那...