Leetcode 5429 陣列中的 k 個最強值

2022-09-16 23:06:30 字數 2447 閱讀 9992

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]

1

<= arr.length <= 10^5

-10^5

<= arr[i] <= 10^5

1<= k <= arr.length

3.題目解析

1)根據題目描述,首先找出陣列的中位數m,用

qsort

函式對陣列進行從小到大排序,中位數即為(arrsize - 1) / 2下標的數;

2)用左右指標實現陣列的遍歷,比較abs(arr[left] - m)和abs(arr[right] - m)的大小,即可找出滿足條件的數;

4.**實現

/*

* * 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;

}

5.提交記錄

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 思路 一 ...