演算法練習 數字重組

2021-07-03 07:07:07 字數 1571 閱讀 8624

一、問題描述

給定兩個陣列表示整數,比如array1 = 

,array2 = 

,求第二個陣列重組後的值,此值最接近第乙個陣列表示的整數,並且大於第乙個陣列中表示的整數。假設兩個整數陣列大小相同,並且肯定能找出符合條件的數。

舉例:輸入:和

輸出:

二、分析與解答

將陣列2

中的數按從小到大的順序排序,然後從陣列1中的

0號單元開始依次掃瞄,在每一趟掃瞄的過程中,從陣列

2的遞增序列中挑選乙個大於或等於當前掃瞄位的值,並標記已使用,如果在掃瞄的過程中,挑選了乙個大於當前掃瞄位的值時,直接將遞增序列中剩餘的數字依次複製到結果集中即可。

三、**實現

//數字重組

#include #include using namespace std;

bool getclosestbigger( const int narray1, int ncount1, int narray2, int ncount2 )

//對narray2按從小到大排序

sort( narray2, narray2+ncount2 );

bool* buses = new bool[ncount2];

memset( buses, 0, sizeof(bool)*ncount2 );

int* presultarray = new int[ncount2];

memset( presultarray, 0, sizeof(int)*ncount2 );

for( int i = 0; i < ncount1; ++i )

break;

} } //複製結果

for( int i = 0; i < ncount2; ++i )

//記憶體釋放

if ( buses )

if ( presultarray )

return true;

}int main()

;// int narray2 = ;

// int narray1 = ;

// int narray2 = ;

int narray1 = ;

int narray2 = ;

getclosestbigger( narray1, _countof(narray1), narray2, _countof(narray2) );

for( int i = 0; i < _countof(narray2); ++i )

cout << endl;

return 0;

}

系列文章說明:

1.本系列文章[演算法練習],僅僅是本人學習過程的乙個記錄以及自我激勵,沒有什麼說教的意思。如果能給讀者帶來些許知識及感悟,那是我的榮幸。

2.本系列文章是本人學習陳東鋒老師《進軍矽谷,程式設計師面試揭秘》一書而寫的一些心得體會,文章大多數觀點均來自此書,特此說明!

3.文章之中,難免有諸多的錯誤與不足,歡迎讀者批評指正,謝謝.

小白演算法練習 數字dp模板

數字dp其實是很靈活的,所以一定不要奢求一篇文章就會遍所有數字dp的題,這一篇只能是講清楚一種情況,其他情況遇到再總結,在不斷總結中慢慢體會這個思想,以後說不定就能達到一看到題目就能靈活運用的水平。其實dp都是這樣 這一篇要說的數字dp是一道最簡單的數字dp 題目大意 多組資料,每次給定區間 n,m...

演算法練習之1數字填充

problem description 晴天小豬喜歡玩數字遊戲,但數獨這樣的遊戲對他來說太難了,於是他準備玩乙個容易點的遊戲。遊戲規則是在乙個n n的 裡填數,規則只有一句話 總是以對角線為起點,先橫著填,再豎著填。遊戲給了一些樣例,請在樣例裡面找到規律並把這個 列印出來吧。input 多組測試資料...

演算法 字串重組

給定乙個字串,輸出該字串所有單個字元重新排列的不重複的字串。例如 abc 輸出 abc,acb,bac,bca,cba,cab 回溯思想,將字串轉化為字元陣列,單個字元兩兩交換位置,完成後回溯到上一層。public arraylist permutation string str hashset s...