Leetcode1838. 最高频元素的频数

news/2024/5/20 8:06:14 标签: leetcode, 算法, 滑动窗口

Every day a Leetcode

题目来源:1838. 最高频元素的频数

解法1:排序 + 滑动窗口

发现1:操作后的最高频元素必定可以是数组中已有的某一个元素。

发现2:优先操作距离目标值最近的(小于目标值的)元素。

将数组 nums 排序,遍历排序后数组每个元素 nums[i] 作为目标值,并求出此时按贪心策略可以改变至目标值的元素左边界。

我们使用 left 与 right 作为执行操作的左右边界(闭区间),同时用 total 来维护将 [left, right] 区间全部变为末尾元素的操作次数。

在这里插入图片描述

在顺序枚举目标值(右边界)的同时,我们更新对应的左边界,并用 max_frq 来维护满足限制的最大区间元素数量即可。

更新对应的左边界的同时, total也要更新:

total -= diff

在这里插入图片描述

代码:

/*
 * @lc app=leetcode.cn id=1838 lang=cpp
 *
 * [1838] 最高频元素的频数
 */

// @lc code=start
class Solution
{
public:
    int maxFrequency(vector<int> &nums, int k)
    {
        int n = nums.size();
        sort(nums.begin(), nums.end());
        int left = 0;
        int max_frq = 1;
        long long sum = 0;
        // 枚举窗口的右边界
        for (int right = 1; right < n; right++)
        {
            long long addition = 1LL * (nums[right] - nums[right - 1]) * (right - left);
            sum += addition;
            // 修改窗口的左边界
            while (sum > k)
            {
                int diff = nums[right] - nums[left];
                sum -= diff;
                left++;
            }
            int cur_frq = right - left + 1;
            max_frq = max(max_frq, cur_frq);
        }
        return max_frq;
    }
};
// @lc code=end

结果:

在这里插入图片描述

复杂度分析:

时间复杂度:O(nlogn),其中 n 是数组 nums 的长度。

空间复杂度:O(1).

解法2:前缀和 + 二分

题解:【1838. 最高频元素的频数】C++解法:「前缀和+二分」


http://www.niftyadmin.cn/n/5110347.html

相关文章

聊聊分布式架构10——Zookeeper入门详解

目录 01ZooKeeper的ZAB协议 ZAB协议概念 ZAB协议基本模式 消息广播 崩溃恢复 选举出新的Leader服务器 数据同步 02Zookeeper的核心 ZooKeeper 的核心特点 ZooKeeper 的核心组件 选举算法概述 服务器启动时的Leader选举 服务器运行期间的Leader选举 03ZooKeeper的…

有哪些手段可以优化 CSS, 提高性能

CSS优化是Web开发中提高性能和用户体验的关键部分。下面详细解释一些CSS优化的方法&#xff0c;以提高性能&#xff1a; 合并和压缩CSS文件: 合并文件&#xff1a;将多个CSS文件合并成一个&#xff0c;以减少HTTP请求次数。这可以通过构建工具&#xff08;如Webpack&#xff09…

大数据技术学习笔记(二)—— Hadoop运行环境的搭建

目录 1 模版虚拟机准备1.1 修改主机名1.2 修改hosts文件1.3 修改IP地址1.3.1 查看网络IP和网关1.3.2 修改IP地址 1.4 关闭防火墙1.5 创建普通用户1.6 创建所需目录1.7 卸载虚拟机自带的open JDK1.8 重启虚拟机 2 克隆虚拟机3 在hadoop101上安装JDK3.1 传输安装包并解压3.2 配置…

SAP-QM-动态检验规则

Dynamic Modification Rule &#xff08;动态修改规则&#xff09; 1、决定样本大小的方式有3种&#xff1a; 手动输入比例大小采样过程 物料主数据质量视图 2、采样过程的创建方式有2种 跟批量大小有关系&#xff1a;百分比/AQL跟批量大小没有关系&#xff1a;固定值 而当…

#力扣:2651. 计算列车到站时间@FDDLC

2651. 计算列车到站时间 - 力扣&#xff08;LeetCode&#xff09; 一、Java class Solution {public int findDelayedArrivalTime(int arrivalTime, int delayedTime) {return (arrivalTimedelayedTime)%24;} }

--JVM调优参数设置 --jvm垃圾回收器

第一章 走进JVM的世界之 了解JVM基础 文章目录 第一章 走进JVM的世界之 了解JVM基础一、JVM是什么&#xff1f;二、常见的JVM调优方法1.选择合适的垃圾回收器2.调整堆内存大小3.调整新生代和老年代的比例4.启用或禁用某些垃圾回收器参数5.使用线程池6.避免对象的频繁创建和销毁…

教你如何打造一款流行的服装定制小程序

随着移动互联网时代的到来&#xff0c;线上商务发展迅猛&#xff0c;服装店也开始积极探索线上销售渠道。其中&#xff0c;小程序成为了服装店主们的首选之一。小程序以其便捷、快速的特点&#xff0c;为服装店的线上经营带来了全新的机遇。接下来&#xff0c;我们将介绍如何通…

JavaPTA练习题 7-4 计算给定两数之间的所有奇数之和

本题目要求接收输入的2个整数a和b&#xff0c;然后输出a~b之间的所有奇数之和。 输入格式: 分别用两行输入两个整数a,b 输出格式: 输出a~b之间的所有奇数之和 输入样例: 在这里给出一组输入。例如&#xff1a; 1 30输出样例: 在这里给出相应的输出。例如&#xff1a; …