1.題目鍊錶
2.題目鏈結
給你乙個整數陣列 arr 和乙個整數 k 。
設 m 為陣列的中位數,只要滿足下述兩個前提之一,就可以判定
arr[i]
的值比
arr[j]
的值更強:
|arr[i] - m| > |arr[j] - m||arr[i] - m| == |arr[j] - m|,且 arr[i] > arr[j]請返回由陣列中最強的 k 個值組成的列表。答案可以以 任意順序 返回。
中位數是乙個有序整數列表中處於中間位置的值。形式上,如果列表的長度為 n ,那麼中位數就是該有序列表(下標從
0 開始)中位於
((n - 1) / 2)
的元素。
例如 arr = [6, -3, 7, 2, 11],
n = 5
:陣列排序後得到
arr = [-3, 2, 6, 7, 11]
,陣列的中間位置為
m = ((5 - 1) / 2) = 2
,中位數
arr[m]
的值為 6 。
例如 arr = [-7, 22, 17, 3],
n = 4
:陣列排序後得到
arr = [-7, 3, 17, 22]
,陣列的中間位置為
m = ((4 - 1) / 2) = 1
,中位數
arr[m]
的值為 3 。
示例 1:
輸入:arr = [1,2,3,4,5], k = 2輸出:[
5,1]
解釋:中位數為
3,按從強到弱順序排序後,陣列變為 [5,1,4,2,3]。最強的兩個元素是 [5, 1]。[1, 5
] 也是正確答案。
注意,儘管 |5 - 3| == |1 - 3| ,但是 5 比 1 更強,因為 5 > 1 。
示例 2:
輸入:arr = [1,1,3,5,5], k = 2輸出:[
5,5]
解釋:中位數為
3, 按從強到弱順序排序後,陣列變為 [5,5,1,1,3]。最強的兩個元素是 [5, 5]。
示例 3:
輸入:arr = [6,7,11,7,6,8], k = 5輸出:[
11,8,6,6,7
]解釋:中位數為
7, 按從強到弱順序排序後,陣列變為 [11,8,6,6,7,7]。[
11,8,6,6,7] 的任何排列都是正確答案。
示例 4:
輸入:arr = [6,-3,7,2,11], k = 3輸出:[-3,11,2]
示例 5:
輸入:arr = [-7,22,17,3], k = 2輸出:[
22,17]
13.題目解析<= arr.length <= 10^5
-10^5
<= arr[i] <= 10^5
1<= k <= arr.length
1)根據題目描述,首先找出陣列的中位數m,用
qsort
函式對陣列進行從小到大排序,中位數即為(arrsize - 1) / 2下標的數;
2)用左右指標實現陣列的遍歷,比較abs(arr[left] - m)和abs(arr[right] - m)的大小,即可找出滿足條件的數;
4.**實現
/*5.提交記錄* * note: the returned array must be malloced, assume caller calls free(). */
int comp(const
void *a, const
void *b)
int* getstrongest(int* arr, int arrsize, int k, int*returnsize)
if (cnt == k - 1
) res[cnt++] =arr[left];
return
res;
}
HDU 5429 KPI(樹狀陣列)
problem description 你工作以後,kpi 就是你的全部了.我開發了乙個服務,取得了很大的知名度。數十億的請求被推到乙個大管道後同時服務從管頭拉取請求。讓我們來定義每個請求都有乙個重要值。我的kpi是由當前管道內請求的重要值的中間值來計算。現在給你服務記錄,有時我想知道當前管道內請求...
陣列中重複數字 leetcode
在乙個長度為n的陣列裡的所有數字都在0 n 1的範圍內。陣列中某些數字是重複的,但不知道哪幾個數字重複了,也不知道每個數字重複了幾次。請找出陣列中任意乙個重複的數字。例如,如果輸入長度為7的數字,那麼對應的輸出是重複的數字2或者3。上來這道題的思路就是暴力解決,如何暴力解決這個問題呢。思路 直接雙重...
leetcode陣列中的問題(十)
目錄 面試題 08.04.冪集 同78.子集 90.子集 ii 46.全排列 77.組合 39.組合總和 冪集。編寫一種方法,返回某集合的所有子集。集合中不包含重複的元素。說明 解集不能包含重複的子集。示例 輸入 nums 1,2,3 輸出 3 1 2 1,2,3 1,3 2,3 1,2 思路 一 ...