原创 I/O模型前期知識

以此圖中I\O阻塞模型爲例 圖中操作體指進程/線程/協程。用戶運行程序要求訪問文件,即創建操作體調用內核中開放的數據接口訪問硬件空間的文件,通過文件名找到文件的inode號碼,通過inode號碼得到inode信息,通過inode

原创 劍指offer(十三)

61. 構建乘積數組 由於不能使用除法,使用數組C 表示 A[i] 左邊的乘積,D表示 A[i] 右邊的乘積,兩者相乘即得結果。 class Solution { public: vector<int> multiply(

原创 pytorch復現loss遇到的問題

復現交叉熵 首先定義了函數對照公式實現了交叉熵的功能 def CrossEntropy(inputs, targets): return np.sum(np.nan_to_num(-targets*(np.log(

原创 KMP模式匹配算法

有點腦殼疼,過段時間再回頭看看吧 是因爲樸素匹配算法的時間複雜度過高,爲降低時間複雜度,有了KMP算法 KMP算法只需str1遍歷一遍即可,重點在於next數組的這個思想。 本文使用c++實現。數據結構書上是用c實現的,next從

原创 劍指offer(十)

46. 兩個鏈表的第一個公共節點 棧的方法。 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NU

原创 劍指offer(十二)

56. 滑動窗口的最大值 這題我覺得最麻煩的是,size使用的 unsigned int的類型,導致後面有點麻煩,所以我直接轉成int型了。 class Solution { public: vector<int> max

原创 劍指offer(十一)

51. 數組中只出現一次的數字 class Solution { public: void FindNumsAppearOnce(vector<int> data,int* num1,int *num2) {

原创 劍指offer(九)

41. 把數組排成最小的數 方法的本質是排序,但是排序標準改爲在前面的做高位得到的數小;由於冒泡寫起來簡單就用了冒泡,就時間複雜度而言還是應該用快排。 class Solution { public: string Pr

原创 劍指offer(八)

36. 數組中出現次數超過一半的數字 自己想的是類似於桶排序的方法,時間複雜度雖然是O(n),但是是用的空間換時間,不划算。 class Solution { public: int MoreThanHalfNum_Sol

原创 劍指offer(七)

31. 二叉樹中和爲某一值的路徑 class Solution { public: vector<vector<int> > FindPath(TreeNode* root,int expectNumber) {

原创 劍指offer(六)

26. 順時針打印矩陣 因爲弄反了行列,所以因爲溢出折騰了好一會。做之前感覺遞歸會更方便,現在還是覺得循環更簡單些。 class Solution { public: void printM(vector<vector<i

原创 劍指offer(四)

16. 刪除鏈表中重複的節點 /* struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), n

原创 劍指offer(五)

21. 鏈表中環的入口節點 這是比較清晰的方式,但是面試時我應該想不出來這個規律,這也是看了別人的答案才知道這個規律的。 /* struct ListNode { int val; struct ListNode

原创 劍指offer(三)

11. 旋轉數組的最小數字 二分法,書上說考的是二分法。。 class Solution { public: int minNumberInRotateArray(vector<int> rotateArray) {

原创 劍指offer(一)

1. 把字符串轉換成整數 class Solution { public: int StrToInt(string str) { if(str.empty()) return 0; int