直通BAT 資料結構與演算法八 位運算

2021-08-03 23:53:56 字數 1479 閱讀 7487

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.根據邊的數目確定...