1.不用任何額外變數交換兩個整數的值
//請編寫乙個演算法,不用任何額外變數交換兩個整數的值。 //
//給定乙個陣列num,其中包含兩個值,請不用任何額外變數交換這兩個值,並將交換後的陣列返回。 //
//測試樣例:
//[1, 2]
//返回:[2, 1]
vectorgetswap::getswap(vectornum)
2.返回a和b中較大的,不能用任何比較判斷
//對於兩個32位整數a和b,請設計乙個演算法返回a和b中較大的。但是不能用任何比較判斷。若兩數相同,返回任意乙個。 //
//給定兩個整數a和b,請返回較大的數。 //
//測試樣例:
//1, 2
//返回:2
int getsign(int a);
int flip(int a);
int getmax::getmax(int a, int b)
int getsign(int a)
int flip(int a)
3.乙個數出現了奇數次,其他的數都出現了偶數次,請列印這個數
//有乙個整型陣列a,其中只有乙個數出現了奇數次,其他的數都出現了偶數次,請列印這個數。要求時間複雜度為o(n),額外空間複雜度為o(1)。 //
//給定整形陣列a及它的大小n,請返回題目所求數字。 //
//測試樣例:
//[1, 2, 3, 2, 1], 5
//返回:3
int findodd::findodd(vectora, int n)
return res; }
4.兩個數出現了奇數次,其他的數都出現了偶數次,找到這兩個數
//給定乙個整型陣列arr,其中有兩個數出現了奇數次,其他的數都出現了偶數次,找到這兩個數。要求時間複雜度為o(n),額外空間複雜度為o(1)。 //
//給定乙個整形陣列arr及它的大小n,請返回乙個陣列,其中兩個元素為兩個出現了奇數次的元素, 請將他們按從小到大排列。 //
//測試樣例:
//[1, 2, 4, 4, 2, 1, 3, 5], 8
//返回:[3, 5]
vectorfindodds::findodds(vectorarr, int n)
//由於兩個數不相等,取xorres某一位上為1,記錄為1的位置
int j = 0;
for (; j < 32; ++j)
//axor上只有該位為1
int axor = 1for (int i = 0; i < n; ++i)
//將res[0]與xorres異或,得到res[1]
res[1] = xorres^res[0];
//將res排序
sort(res.begin(),res.end());;
return res; }
直通BAT 資料結構與演算法十 排列組合
排列組合常考題型 1.括號合法問題 假設有n對左右括號,請求出合法的排列有多少個?合法是指每乙個括號都可以找到與之配對的括號,比如n 1時,是合法的,但是 為不合法。給定乙個整數n,請返回所求的合法排列數。保證結果在int範圍內。測試樣例 1 返回 1 class parenthesissequen...
資料結構與演算法(八)
運算元入棧,然後碰到操作符出棧頂的兩個運算元,之後得到結果加到棧頂。def postfix evaluation postfix,operand stack 運算元棧 for i in postfix 1 若為運算元 字母 入棧 if97 ord i 122 i float join operand...
資料結構與演算法分析(八) BFS演算法
圖的組成 頂點 vertices 邊 edges 圖的一些概念 1.鄰接 adjacent v1和v2相連線 2.路徑 path 乙個頂點序列 3.圈 cycle 乙個頂點出現了兩次 圖的表示 1.鄰接矩陣 空間大,但是速度快 2.鄰接表 空間小,但速度慢 實現 實現的是無權圖 1.根據邊的數目確定...