栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

1471. 数组中的 k 个最强值

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

1471. 数组中的 k 个最强值

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 getStrongest(vector& arr, int k) {
        int n = arr.size();
        sort(arr.begin(), arr.end());
        int m = arr[(n - 1) / 2]; 
        vector 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;
    }
};
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/883533.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号