每日一練之最小的k個數

2021-10-08 13:52:17 字數 1210 閱讀 3676

直接排序,然後取前k小資料。

vector<

int>

getleastnumbers_solution

(vector<

int> input,

int k)

return res;

}

時間複雜度:o(nlongn)

空間複雜度:o(1)

建立乙個容量為k的大根堆的優先佇列 priority_queue(預設大根堆)。遍歷一遍元素,如果佇列大小<

int>

getleastnumbers_solution

(vector<

int> input,

int k)}}

while

(!q.

empty()

)return res;

}時間複雜度:o(nlongk), 插入容量為k的大根堆時間複雜度為o(longk), 一共遍歷n個元素

空間複雜度:o(k)

對陣列[l, r]一次快排partition過程可得到,[l, p), p, [p+1, r)三個區間,[l,p)為小於等於p的值

[p+1,r)為大於等於p的值。

然後再判斷p,利用二分法

如果[l,p), p,也就是p個元素(因為下標從0開始),如果p == k - 1, 找到答案

2。 如果p < k - 1, 說明答案在[p+1, r)區間內,

3, 如果p > k + 1 , 說明答案在[l, p)內

class

solution

swap

(arr[l]

, arr[j]);

return j;

}

vector<

int>

getleastnumbers_solution

(vector<

int> input,

int k));

}else

if(p >= k-1)

r = p;

else

l = p +1;

}return res;}}

;

時間複雜度:平均時間複雜度為o(n),每次partition的大小為n+n/2+n/4+… = 2n,最壞時間複雜度為o(n^2), 因為每次partition都只減少乙個元素

空間複雜度:o(1)

每日一練之最長的括號子串

括號要是有效的,必定是成對出現的。比如乙個長度為 7 的字串,我們可以先以 6 個字元為視窗進行滑動判斷,如果 6 個字元沒有匹配的,再以 4 個字元為視窗進行滑動判斷。但是要超時。bool ismatch string str if s.empty return true return false...

每日一練4

員工表emp 員工編號eid,姓名ename,工作職位title,僱傭日期hiretime,工資salary,獎金bonus,部門depart 部門表dept 部門編號did,名稱dname,部門領導leader 員工資料 1001,張三 銷售 1999 12 1 3000.0,1100.0,102...

每日一練25

請描述 mysql 從安裝到配置的全部詳細過程 確保一台新電腦可以順利使用 mysql mysql安裝嚮導啟動,按 next 繼續 選擇安裝型別,有 typical 預設 complete 完全 custom 使用者自定義 三個選項,我們選擇 custom 有更多的選項,也方便熟悉安裝過程 選擇配置...