1471. 數組中的 k 個最強值

解題思路

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;
    }
};
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章