一、問題描述
給定兩個陣列表示整數,比如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...