題目描述:
在未排序的陣列中找到第 k 個最大的元素。請注意,你需要找的是陣列排序後的第 k 個最大的元素,而不是第 k 個不同的元素。
示例 1:
輸入: [3,2,1,5,6,4] 和 k = 2
輸出: 5
解法①:堆
思路:建立乙個大頂堆,並保持堆的大小小於等於k。堆內的排序從堆頂遞增,最後的堆頂就是所求。
時間複雜度:o(n logk):n 對n個陣列插入 logk:堆的插入是二分查詢
空間複雜度:o(k);
解法②:快速選擇
我的思路:尋找第k大,則是找第length-k小。並不需要把陣列排序,因為我們對於第k大左側順序,第k大右側順序不敢興趣。只要找到乙個數,它的左側有length-k-1比它小;它的右側有k-1個比它大即可
題解思路:
隨機選擇乙個樞軸;使用劃分演算法將樞軸放在陣列中的合適位置pos。將小於數週的元素移到左邊,大於等於樞軸移到右邊;比較pos和n-k,以決定在那邊繼續遞迴處理。
**:
public
class
solution
intquickselect
(int left,
int right,
int target,
refint
nums)
//遞迴運算
intpartition
(int left,
int right,
int target,
refint
nums)
//進行排序
//假如都是小於,則left會一直等於i;等到有大於的,left會一直指向大於的數,直到拍到後面
swap
(right,left,
ref nums)
;//最後把樞軸給換到中間的地方
return left;
//樞軸的序號
}void
swap
(int i,
int j,
refint
nums)
//進行對調
}
最快的方法:
public
class
solution
private
intquickselect
(int left,
int right,
int kthsmallest)
private
intpartition
(int left,
int right,
int pivotindex)
}swap
(pivotindex, right)
;return pivotindex;
}private
void
swap
(int left,
int right)
}不同之處:它把nums提到了class內,這樣就不用一直傳遞nums,在return**,它直接用了else,不用再加個return
0
題目描述:
給定m×n矩陣,每一行、每一列都按公升序排列,請編寫**找出某元素。
示例:現有矩陣 matrix 如下:
[[1, 4, 7, 11, 15],
[2, 5, 8, 12, 19],
[3, 6, 9, 16, 22],
[10, 13, 14, 17, 24],
[18, 21, 23, 26, 30]
]給定 target = 5,返回 true。
給定 target = 20,返回 false。
題目描述:
我們有乙個由平面上的點組成的列表 points。需要從中找出 k 個距離原點 (0, 0) 最近的點。
(這裡,平面上兩點之間的距離是歐幾里德距離。)
你可以按任何順序返回答案。除了點座標的順序之外,答案確保是唯一的。
示例 1:
輸入:points = [[1,3],[-2,2]], k = 1
輸出:[[-2,2]]
解釋:(1, 3) 和原點之間的距離為 sqrt(10),
(-2, 2) 和原點之間的距離為 sqrt(8),
由於 sqrt(8) < sqrt(10),(-2, 2) 離原點更近。
我們只需要距離原點最近的 k = 1 個點,所以答案就是 [[-2,2]]
LeetCode學習 分治演算法思想
之前我們說了遞迴的重點就是乙個終止條件 也叫邊界條件 此處的邊界條件就是f n 中的n 1 當n 1時就表示遞迴進入了最低成,下一步就是要往上返回了。算 n 的階乘 假設n不為0 deff n if n 1 return 1else return n f n 1 print f 6 720再來說這段...
演算法 分治演算法
分治策略主要利用遞迴來解決問題,它包括以下三個步驟 分解 將問題分解為一與原問題類似並且比原問題規模更小的子問題 解決 當分解的子問題足夠小時,直接給出答案,否則用遞迴打方式求解 合併 將子問題的解合成原問題的解 下面考慮乙個簡單的利用分治演算法的歸併排序的例子 問題的形式化描述如下 輸入 a是 乙...
演算法 分治演算法
leetcode 169.多數元素 應用舉例 通過應用舉例分析理解分治演算法的原理其實並不難,但是要想靈活應用並在程式設計中體現這種思想中 卻並不容易。所以,這裡這裡用分治演算法應用在排序的時候的乙個栗子,加深對分治演算法的理解。相關概念 一般通過計算有序對或者逆序對的個數,來表示資料的有序度或逆序...