2023年力扣高頻演算法面試題1數學 位運算

2021-10-07 02:23:16 字數 2442 閱讀 7362

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

要求:線性時間複雜度、不使用額外空間

解答:典型的位運算,相同的兩個數異或為0,擴充套件形式為,找出給定非空整數陣列中只出現一次的兩個整數。

int singlenumber(vector& nums) 

for (int k = 0; k < points.size(); ++k)

}res = max(res, cnt);

}res = max(res, duplicate);

}return res;}};

參考

給定兩個整數,分別表示分數的分子 numerator 和分母 denominator,以字串形式返回小數。如果小數部分為迴圈小數,則將迴圈的部分括在括號內。

①迴圈體出現的標誌是什麼?我們研究一下1/6。

最開始補零,變成10/6,寫成0.1,這時候餘數是4。

餘數4再去除以6,變成40/6,寫成0.16,這時候餘數是4,。

餘數4再去除以6……

這個時候我們都知道接下來必定是迴圈體結構了,因為出現了相同的被除數。

所以我們不能把兩個整數變成double型別,直接相除,而是應該不斷地整數相除,記錄餘數,餘數再去除以除數。

在這個過程中記錄餘數,如果出現了重複的餘數,那麼必定是迴圈體結構了。

②邊界條件,比如-2147483648/-1,-1/-2147483648,7/-12等等。

string fractiontodecimal(int numerator, int denominator) 

else//如果都是正數或者都是負數

res=to_string(shang);//直接處理

if(yushu==0)//如果餘數為0,那麼到此為止,返回res就可以了

return res;

res+='.';//如果還有餘數,那麼要加個小數點

unordered_maprecord;//記錄出現過的餘數和餘數除以除數得到的商的位置

while(yushu!=0)

record[yushu]=res.size();//如果沒出現過,那麼記錄在record中,value是這個餘數除以除數得到的商應該放的位置

shang=yushu/denominator;//更新商

yushu=yushu%denominator;//更新餘數

res+=to_string(shang);//加入最新的商

}return res;//如果一直沒有出現重複的餘數,那麼最終跳出迴圈後直接返回res

}

給定乙個整數 n,返回 n! 結果尾數中零的數量。

要求:時間複雜度應為 o(log n)。

思路:1~n之間有多少5的倍數。

class solution 

return res;}};

給定乙個包含 0, 1, 2, …, n 中 n 個數的序列,找出 0 … n 中沒有出現在序列中的那個數。

要求:演算法應具有線性時間複雜度,僅使用額外常數空間來實現。

不缺失數字時候的和可以計算,缺失數字之後的和遍歷一遍也可以計算出來,二者相減就是缺失的數字.

class solution 

};

顛倒給定的 32 位無符號整數的二進位制位。

高階:如果多次呼叫這個函式,你將如何優化你的演算法?

class solution  else 

n = n >> 1;

}return res;}};

補充題目

calculate the sum of two integers a and b, but you are not allowed to use the operator + and -.

由於異或是相同則位0,不同則位1,因此我們可以把異或看成是一種不進製的加減法

由於與是全部位1則位1,否則位0,因此我們可以求與之後左移一位來表示進製

class solution 

return a;}};

2023年力扣高頻演算法面試題9樹

給定乙個二叉搜尋樹,編寫乙個函式 kthsmallest 來查詢其中第 k個最小的元素。假設 k 總是有效的,1 k 二叉搜尋樹元素個數。高階 如果二叉搜尋樹經常被修改 插入 刪除操作 並且你需要頻繁地查詢第 k 小的值,你將如何優化 kthsmallest 函式?解題思路 利用find記錄是否找到...

2023年力扣高頻演算法面試題4動態規劃

給定長度為 n 的整數陣列 nums,其中 n 1,返回輸出陣列 output 其中 output i 等於 nums 中除 nums i 之外其餘各元素的乘積。說明 請不要使用除法,且在 o n 時間複雜度內完成此題。分析 對於某乙個數字,如果我們知道其前面所有數字的乘積,同時也知道後面所有的數乘...

2023年力扣高頻演算法面試題6鍊錶

之前在csdn寫過一篇 鍊錶與快慢指標 的筆記 判斷鍊錶是否有環 找到環的入口 反轉鍊錶 請編寫乙個函式,使其可以刪除某個鍊錶中給定的 非末尾 節點,你將只被給定要求被刪除的節點。分析 之前有同學去哈深面試也問過類似的問題。沒有給我們鍊錶的起點,只給我們了乙個要刪的節點,跟我們以前遇到的情況不太一樣...