原创 移除k位數

各位數字最好從高位到低位保持上升。但是雖然能保證有序,但是遵照題目要求,只能剔除前面k個不遵守該規定的數字。 class Solution: def removeKdigits(self, num: str, k: int) -

原创 協程池

基於生產者-消費者的設計。 任務數據結構 Task 自帶方法 exec() 負責執行Task任務的任意函數 f(),Pool的run()開啓N個消費者協程監聽共享無緩衝channel,生產者協程封裝數據id和函數t到數據結構Task,導入

原创 棧訪問速度快還是堆

棧的增減只需要移動棧頂寄存器。堆需要便歷鏈表,找到空的區間,可能還要處理內存碎片。 棧是本着LIFO原則的存儲機制,尋址間距短,對棧數據的定位相對比較快速, 而堆則是隨機分配的空間,處理的數據比較多,無論如何,至少要兩次定位。 其次, 棧

原创 C語言實現類cpp的類

基於函數指針實現的成員函數,通過struct嵌套實現簡單繼承派生和多態。 #include<stdio.h> #include<stdlib.h> // 僞類 typedef struct _Class Class; struct _Cl

原创 內存垃圾管理(智能指針)

智能指針 shared_ptr: https://blog.csdn.net/u012501459/article/details/48229399 C++11中引入了智能指針的概念。使用普通指針,容易造成堆內存泄露(忘記釋放),二次

原创 STL裏的四種智能指針 auto_ptr、scoped_ptr、shared_ptr、weak_ptr

基於安全考慮: auto_ptr< string> ps (new string ("I reigned lonely as a cloud.”); auto_ptr<string> vocation; vocaticn = ps;

原创 倆數組區間交集

雙指針,注意單個數組的前面可能重疊,後面也可能。 遇到 [1,3],[2,4]這種重疊的記得left指針要拋棄[1,3]這種end更小的然後left++,因爲下一個重疊肯定跟[1,3]沒關係了。 如果沒有重疊那就把前面那個指針++。 c

原创 區間並集

class Solution { public: static bool cmp(vector<int>&a,vector<int>&b){ // end從小到大,相同條件begin從大到小 re

原创 不同字符的最小子序列

class Solution { public: string smallestSubsequence(string s) { if(s==""){ return "";

原创 多次握手揮手

TCP三次握手的過程,accept發生在三次握手的哪一個階段? accept過程發生在三次握手之後,三次握手完成後,客戶端和服務器就建立了tcp連接並可以進行數據交互了。這時可以調用accept函數獲得此連接。 Accept默認會

原创 搶紅包算法(隨機數)

公平法 紅包剩餘金額爲 M 紅包剩餘數量爲 N 這種算法就是每次都在區間[0,M/N×2] 隨機取一個數。假設100元紅包發10個人,那麼合理的做法應該是每個人領到10元的概率相同。 第一個人隨機金額的範圍爲[0,100/10×2]

原创 超讚字符子串

要求一個連續字串,最多隻有一個數重複出現奇數次,其他都是偶數次或者沒出現。 劍指有類似題目,通過異或=0使偶數次消去,只剩下唯一的奇數次數。但是這道題只有0-9,所以可以通過異或1<<0 (2^0)到1<<9 (2^9),得到壓縮後的s

原创 (前綴和)和爲k的子數組

需要處理一個特殊前綴和(即-1位置對應的前綴和爲0,直接設置map[0]=1即可),在添加sums進map之前需要計算該點之前有多少點滿足到該點的和爲k。map存儲前綴和key對應的點個數。 class Solution { publi

原创 擁塞控制與流量控制

流量控制 如果發送者發送數據過快,接收者來不及接收,那麼就會有分組丟失。爲了避免分組丟失,控制發送者的發送速度,使得接收者來得及接收,這就是流量控制。流量控制根本目的是防止分組丟失,它是構成TCP可靠性的一方面。 由滑動窗口協議(連續AR

原创 HTTP1.0到2.0

HTTP1.0 "一來一回",每個請求都是一個TCP連接(端口不一定夠用),建立連接開銷大,服務端沒法主動推送消息。 爲了解決這些問題提出了Keep-Alive機制: 客戶端添加字段connection:Keep-Alive,服務端處