|
| 1 | +/** |
| 2 | + * 1471. The k Strongest Values in an Array |
| 3 | + * https://leetcode.com/problems/the-k-strongest-values-in-an-array/ |
| 4 | + * Difficulty: Medium |
| 5 | + * |
| 6 | + * Given an array of integers arr and an integer k. |
| 7 | + * |
| 8 | + * A value arr[i] is said to be stronger than a value arr[j] if |arr[i] - m| > |arr[j] - m| |
| 9 | + * where m is the centre of the array. |
| 10 | + * |
| 11 | + * If |arr[i] - m| == |arr[j] - m|, then arr[i] is said to be stronger than arr[j] |
| 12 | + * if arr[i] > arr[j]. |
| 13 | + * |
| 14 | + * Return a list of the strongest k values in the array. return the answer in any arbitrary order. |
| 15 | + * |
| 16 | + * The centre is the middle value in an ordered integer list. More formally, if the length of the |
| 17 | + * list is n, the centre is the element in position ((n - 1) / 2) in the sorted list (0-indexed). |
| 18 | + * - For arr = [6, -3, 7, 2, 11], n = 5 and the centre is obtained by sorting the array |
| 19 | + * arr = [-3, 2, 6, 7, 11] and the centre is arr[m] where m = ((5 - 1) / 2) = 2. The centre is 6. |
| 20 | + * - For arr = [-7, 22, 17, 3], n = 4 and the centre is obtained by sorting the array |
| 21 | + * arr = [-7, 3, 17, 22] and the centre is arr[m] where m = ((4 - 1) / 2) = 1. The centre is 3. |
| 22 | + */ |
| 23 | + |
| 24 | +/** |
| 25 | + * @param {number[]} arr |
| 26 | + * @param {number} k |
| 27 | + * @return {number[]} |
| 28 | + */ |
| 29 | +var getStrongest = function(arr, k) { |
| 30 | + const sorted = arr.slice().sort((a, b) => a - b); |
| 31 | + const centre = sorted[Math.floor((sorted.length - 1) / 2)]; |
| 32 | + |
| 33 | + return arr.sort((a, b) => { |
| 34 | + const diffA = Math.abs(a - centre); |
| 35 | + const diffB = Math.abs(b - centre); |
| 36 | + return diffA === diffB ? b - a : diffB - diffA; |
| 37 | + }).slice(0, k); |
| 38 | +}; |
0 commit comments