解題思路
1、使用雙指針!
2、一定清晰問題解決的邏輯順序
3、最重要的是審題,我總是心太急,不願意認真讀題,結果導致花費了更多的時間。
例如:中位數 是一個有序整數列表中處於中間位置的值。形式上,如果列表的長度爲 n ,那麼中位數就是該有序列表(下標從 0 開始)中位於 ((n - 1) / 2) 的元素。
我最初還分奇偶考慮問題,太蠢了。
代碼
class Solution {
public:
vector<int> getStrongest(vector<int>& arr, int k) {
if(arr.empty()) return {};
int len = arr.size();
sort(arr.begin(),arr.end());//排序應該在選中位數之前
int mid = arr[(len-1)/2];
vector<int> res;
for(int i = 0,j = len-1;k;)
{
if(abs(arr[i]-mid)>abs(arr[j]-mid)||(abs(arr[i]-mid)==abs(arr[j]-mid)&&arr[i]>arr[j]))
{
res.push_back(arr[i]);
i++;k--;
}
else
{
res.push_back(arr[j]);
j--;k--;
}
}
return res;
}
};