首页 > 其他分享 >leetcode2968 执行操作使频率分数最大

leetcode2968 执行操作使频率分数最大

时间:2024-12-04 22:11:38浏览次数:4  
标签:分数 pre 数组 nums int leetcode2968 std 频率 ans

给定长度为n的数组nums和整数k,可以对数组执行至多k次操作,每次选择1个nums[i],将其增加或减少1,最终数组的频率分数定义为数组众数的频率,求可以得到的最大频率分数。
1<=n<=1E5; 1<=nums[i]<=1E9; 0<=k<=1E14

分析:
(1)中位数贪心:对于有序数组,如果所有元素都变成相同的数,最优做法是全部变成中位数。如果个数为偶数,则变成中间两数或者该两数之间任意整数,结果是一样的。
(2)前缀和快速求和,前半部分是负的,后半部分是正的,分开算。
(3)对原数组排序,然后滑动窗口维护可行的子数组,更新答案。

class Solution {
public:
    int maxFrequencyScore(vector<int>& nums, long long k) {
        std::sort(nums.begin(), nums.end());
        int n = nums.size();
        std::vector<long long> pre(n);
        pre[0] = nums[0];
        for (int i = 1; i < n; i++) {
            pre[i] = pre[i - 1] + nums[i];
        }
        auto sum = [&](int l, int r) {
            l = std::max(l, 0);
            r = std::min(r, n - 1);
            return l ? pre[r] - pre[l - 1] : pre[r];
        };
        auto get = [&](int l, int r) {
            int m = (l + r) / 2;
            int L = m - l + 1;
            int R = r - m;
            return 1LL * (L - R) * nums[m] - sum(l, m) + sum(m + 1, r);
        };
        int ans = 0;
        for (int l = 0, r = 0; r < n; r++) {
            while (get(l, r) > k) {
                l += 1;
            }
            ans = std::max(ans, r - l + 1);
        }
        return ans;
    }
};

标签:分数,pre,数组,nums,int,leetcode2968,std,频率,ans
From: https://www.cnblogs.com/chenfy27/p/18587324

相关文章

  • 2024-12-02:划分数组得到最小的值之和。用go语言,你有两个数组,nums 和 andValues,它们的
    2024-12-02:划分数组得到最小的值之和。用go语言,你有两个数组,nums和andValues,它们的长度分别为n和m。定义数组的“值”为其最后一个元素。你的任务是将nums划分为m个不重叠的连续子数组。对于第i个子数组[li,ri],该子数组的所有元素通过按位与运算后,结果必须等......
  • 简述那些领域里声级计的运用频率较广泛
    声级计是一种用于测量噪音水平的仪器,可以帮助人们评估噪音对环境和人体健康的影响。在现代社会中,许多行业都需要使用声级计来监测和控制噪音。以下是一些常见的需要使用声级计的行业:1.工业制造业:在工业生产过程中,会产生各种机械噪音、设备噪音以及运输噪音等。对于工业企业而......
  • 固定 RK3399 的 CPU 频率
    1简介类似Rockpi4SE(RK3399-T)这一类的类树莓派核心板,一般出厂自带的频率控制方式为自动调频,这就对CPU的性能进行了部分限制。这里以Rockpi4SE为例子介绍如何固定CPU频率。2查看CPU支持的频率RK3399-T的CPU参数如下:2xCortex-72,frequency1.5GHz4xCo......
  • 1308. 不同性别每日分数总计
    目录题目链接(无_力扣VIP_略过)一.读题(建议使用这种表结构_数据对比看)题目SQLSchema建表语句_数据二.答案_一图解一图解__可只需看此答案------------------------------------------------------------------------------方法1分析流程图方法2分析流程图难点分析关......
  • 阿里技术岗位笔试&面试题:最大频率栈
    题目:最大频率栈。实现FreqStack,模拟类似栈的数据结构的操作的一个类。FreqStack有两个函数:push(intx),将整数x推入栈中pop(),它移除并返回栈中出现最频繁的元素。如果最频繁的元素不只一个,则移除并返回最接近栈顶的元素。◼示例:push[5,7,5,7,4,5]pop()->返回5,因......
  • 深度学习——3种常见的Transformer位置编码【sin/cos、基于频率的二维位置编码(2D Freq
    ......
  • 滚筒洗衣机的机身清洗是维护其运行和延长使用寿命的重要步骤。机身清洗主要包括内部清
    滚筒洗衣机的机身清洗是维护其运行和延长使用寿命的重要步骤。机身清洗主要包括内部清洁(如内桶清洁)和外部清洁(如外壳和控制面板清洁)。根据使用频率和洗衣机的具体情况,清洁周期可以参考以下表格:滚筒洗衣机机身清洗周期表清洗项目清洗周期清洗方法与注意事项内桶清洁每......
  • SQL Server 将小数转换成分数的方法 dbo.cusf_DecimalToFraction(@DecimalValue DECIM
     USETESTDBGO--=============================================--Author:WRN--Createdate:2024-11-2516:30:34--Database:TESTDB--Description:将小数转成分数形式--=============================================ALTERFUNCTIONdbo.CusF......
  • 蓝桥杯c++算法学习【5】之枚举与模拟(卡片、回文日期、赢球票、既约分数:::非常典型的比刷
     别忘了请点个赞+收藏+关注支持一下博主喵!!!! ! ! !!!关注博主,更多蓝桥杯nice题目静待更新:)枚举与模拟一、卡片:【问题描述】        小蓝有很多数字卡片,每张卡片上都是一个数字(0到9)。         小蓝准备用这些卡片来拼一些数,他想从1开始拼出正整数......
  • 基于51单片机数字频率计的设计
    基于51单片机数字频率计(仿真+程序+原理图+PCB+设计报告)功能介绍具体功能:1.用74HC08和74HC393处理输入频率信号;2.LCD1602显示频率和周期;3.按键可以切换显示Vpp;​演示视频:基于51单片机频率计仿真—LCD1602 添加图片注释,不超过140字(可选)程序#include<reg51.h>......