百度一道面試題的解

2022-04-03 05:45:53 字數 795 閱讀 7709

有乙個陣列,要求用程式輸出所有和為10的組合(10也包括在內)

遞迴,回溯

對於其中乙個數ni,其和為某個數的組合可以分解為兩個互不相干的子問題:

1、在0到i-1的範圍內尋找和為(當前和)的組合

2、(當前和)=(當前和)-(ni),然後在0到i-1的範圍內尋找和為(當前和)的組合

為了列印遍歷路徑,設定了乙個輔助vector,每次遇到情況2的時候把這個數存放在vector中,情況2遍歷完後,再pop出,繼續找情況1

廢話就這麼多,上碼:

#include #include 

using

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 等等方法!我都覺得麻煩,思維方式就是,從節省時間考慮,從陣列來看,我們都得遍歷一次陣列裡面的元素,那...