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