直接排序,然後取前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 有更多的選項,也方便熟悉安裝過程 選擇配置...