leetcode力扣刷题打卡
题目:1471. 数组中的 k 个最强值
描述:给你一个整数数组 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) 的元素。
思路:
1、这道题实质上是判断两端到中位数的距离水大谁小,大的就存入数组中,直到存满k个。
2、双指针,头尾开始判断。
原代码##
class Solution {
public:
vector<int> getStrongest(vector<int>& arr, int k) {
int n = arr.size();
sort(arr.begin(), arr.end());
int m = arr[(n - 1) / 2];
vector<int> ans;
int l = 0, r = n - 1;
while (k > 0 && l <= r) {
if (arr[r] - m >= m - arr[l]) {
ans.push_back(arr[r]);
r--;
} else {
ans.push_back(arr[l]);
l++;
}
k--;
}
return ans;
}
};