第 380 场 LeetCode 周赛题解

news2024/11/20 3:37:05

A 最大频率元素计数

在这里插入图片描述

模拟:先统计元素的频率,然后求由最大频率的元素的总频率

class Solution {
public:
    int maxFrequencyElements(vector<int> &nums) {
        unordered_map<int, int> cnt;
        for (auto x: nums)
            cnt[x]++;
        int mx = 0, s = 0;
        for (auto [_, f]: cnt)
            if (f > mx) {
                mx = f;
                s = f;
            } else if (f == mx)
                s += f;
        return s;
    }
};

B 找出数组中的美丽下标 I

在这里插入图片描述

同t4…

class Solution {
public:
    vector<int> beautifulIndices(string s, string a, string b, int k) {
        srand(time(0));//随机种子
        int e = 2333 + rand() % 100, mod = 1e9 + rand() % 100;
        shash hs(s, e, mod), ha(a, e, mod), hb(b, e, mod);
        vector<int> vi, vj;
        int ns = s.size(), na = a.size(), nb = b.size();
        for (int i = 0; i <= ns - na; i++)
            if (hs(i, i + na - 1) == ha(0, na - 1))
                vi.push_back(i);
        for (int j = 0; j <= ns - nb; j++)
            if (hs(j, j + nb - 1) == hb(0, nb - 1))
                vj.push_back(j);
        vector<int> res;
        for (auto i: vi) {
            auto l = lower_bound(vj.begin(), vj.end(), i - k);
            auto r = lower_bound(vj.begin(), vj.end(), i + k + 1);
            if (l != r)
                res.push_back(i);
        }
        return res;
    }

    class shash {//字符串哈希模板
    public:
        using ll = long long;
        vector<ll> pres;
        vector<ll> epow;
        ll e, p;

        shash(string &s, ll e, ll p) {
            int n = s.size();
            this->e = e;
            this->p = p;
            pres = vector<ll>(n + 1);
            epow = vector<ll>(n + 1);
            epow[0] = 1;
            for (int i = 0; i < n; i++) {
                pres[i + 1] = (pres[i] * e + s[i]) % p;
                epow[i + 1] = (epow[i] * e) % p;
            }
        }

        ll operator()(int l, int r) {
            ll res = (pres[r + 1] - pres[l] * epow[r - l + 1] % p) % p;
            return (res + p) % p;
        }
    };
};

C 价值和小于等于 K 的最大数字

在这里插入图片描述

二分 + 数学:通过二分枚举答案,这需要求不超过 m i d mid mid 的非负数( 0 0 0 的价值和为 0 0 0 不影响答案)的价值和,枚举二进制中的满足 i % x = = 0 i \% x == 0 i%x==0 的第 i i i 位, 0 ∼ m i d 0\sim mid 0mid 的第 i i i 位形成长为 2 i 2^i 2i 的循环数列的前 m i d + 1 mid+1 mid+1 项: 0 , ⋯   , 0 ⏟ 2 i − 1 个 0 , 1 , ⋯   , 1 ⏟ 2 i − 1 个 1 ⋯ \underset{2^{i-1}个0}{\underbrace{0,\cdots,0} } ,\underset{2^{i-1}个1}{\underbrace{1,\cdots,1} } \cdots 2i10 0,,0,2i11 1,,1,所以可以直接求 0 ∼ m i d 0\sim mid 0mid 中第 i i i 位为 1 1 1 的数的数目

class Solution {
public:
    using ll = long long;

    long long findMaximumNumber(long long k, int x) {
        ll l = 1, r = 1e15;
        while (l < r) {
            ll mid = (l + r + 1) / 2;
            ll s = 0;
            for (int i = 0; i < 50; i++)
                if ((i + 1) % x == 0) {
                    ll e = 1LL << (i + 1), se = 1LL << i;
                    ll c = (mid + 1) / e, mod = (mid + 1) % e;
                    s += c * se + (mod > se ? mod - se : 0);
                }
            if (s <= k)
                l = mid;
            else
                r = mid - 1;
        }
        return l;
    }
};

D 找出数组中的美丽下标 II

在这里插入图片描述

字符串哈希 + 二分:先用字符串哈希求出满足 0 ≤ i ≤ s . l e n g t h − a . l e n g t h 0 \le i \le s.length - a.length 0is.lengtha.length s [ i , ( i + a . l e n g t h − 1 ) ] = a s[i,(i + a.length - 1)]=a s[i,(i+a.length1)]=a i i i 构成的有序数组 v i vi vi,和满足 0 ≤ j ≤ s . l e n g t h − b . l e n g t h 0 \le j \le s.length - b.length 0js.lengthb.length s [ j , ( j + b . l e n g t h − 1 ) ] = b s[j,(j + b.length - 1)]=b s[j,(j+b.length1)]=b j j j 构成的有序数组 v j vj vj ,然后枚举 v i vi vi 中的 i i i ,在 v j vj vj 中二分查找 j ∈ [ i − k , i + k − 1 ) j\in [i-k,i+k-1) j[ik,i+k1) ,如果存在这样的 j j j ,则将 i i i 加入答案数组

class Solution {
public:
    vector<int> beautifulIndices(string s, string a, string b, int k) {
        srand(time(0));//随机种子
        int e = 2333 + rand() % 100, mod = 1e9 + rand() % 100;
        shash hs(s, e, mod), ha(a, e, mod), hb(b, e, mod);
        vector<int> vi, vj;
        int ns = s.size(), na = a.size(), nb = b.size();
        for (int i = 0; i <= ns - na; i++)
            if (hs(i, i + na - 1) == ha(0, na - 1))
                vi.push_back(i);
        for (int j = 0; j <= ns - nb; j++)
            if (hs(j, j + nb - 1) == hb(0, nb - 1))
                vj.push_back(j);
        vector<int> res;
        for (auto i: vi) {
            auto l = lower_bound(vj.begin(), vj.end(), i - k);
            auto r = lower_bound(vj.begin(), vj.end(), i + k + 1);
            if (l != r)
                res.push_back(i);
        }
        return res;
    }

    class shash {//字符串哈希模板
    public:
        using ll = long long;
        vector<ll> pres;
        vector<ll> epow;
        ll e, p;

        shash(string &s, ll e, ll p) {
            int n = s.size();
            this->e = e;
            this->p = p;
            pres = vector<ll>(n + 1);
            epow = vector<ll>(n + 1);
            epow[0] = 1;
            for (int i = 0; i < n; i++) {
                pres[i + 1] = (pres[i] * e + s[i]) % p;
                epow[i + 1] = (epow[i] * e) % p;
            }
        }

        ll operator()(int l, int r) {
            ll res = (pres[r + 1] - pres[l] * epow[r - l + 1] % p) % p;
            return (res + p) % p;
        }
    };
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1384349.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux------进程的初步了解

目录 一、什么是进程 二、进程的标识符pid 三、getpid 得到进程的PID 四、kill 终止进程 五、父进程与子进程 六、目录中的进程 一、什么是进程 在windows中&#xff0c;我们查看进程很简单&#xff0c;打开任务管理器&#xff0c;就可以看到在运行的进程。这里我们还可以…

跟着暄桐林曦老师读《宝贵的人生建议》,重视心这颗种子

暄桐林曦老师在《见道明心的笔墨》读书课上讲到&#xff1a;人要在心这颗种子上去进化。当人的动机和果实都清静时&#xff0c;才能在内心具足里转化出更多可能性&#xff0c;进入正面的循环里。“宽以待人&#xff0c;严以律己&#xff0c;反之&#xff0c;则人人身处地狱”&a…

Tuxera NTFS for Mac v2023破解版百度云下载和激活

软件介绍 Tuxera NTFS for Mac破解版是一款mac读写NTFS磁盘工具软件&#xff0c;可以高效的读写NTFS格式的设备&#xff0c;对设备的存储空间进行访问、编辑、存储和传输文件等操作。此外这款软件还具备对硬盘等设备的管理以及修复检测功能&#xff0c;所以安装一款Tuxera NTF…

力扣日记1.14-【二叉树篇】108. 将有序数组转换为二叉搜索树

力扣日记&#xff1a;【二叉树篇】108. 将有序数组转换为二叉搜索树 日期&#xff1a;2023.1.14 参考&#xff1a;代码随想录、力扣 108. 将有序数组转换为二叉搜索树 题目描述 难度&#xff1a;简单 给你一个整数数组 nums &#xff0c;其中元素已经按 升序 排列&#xff0c;…

【C++】-类和对象(友元!!内部类!!匿名对象!详解)

类和对象⑤ 友元内部类匿名对象 在之前的类和对象①、②、③、④篇中&#xff0c;详细讲解了类和对象的基本知识&#xff0c;本章为最终章&#xff0c;继续为大家介绍类和对象。 友元 我们已知的&#xff0c;在C中&#xff0c;有一种私有访问修饰符&#xff0c;用于限制类的成…

this.setState的注意事项

目录 1、this.setState的注意事项 2、是什么造成了this.setState()的不同步&#xff1f; 3、 那this.setState()什么时候同步&#xff0c;什么时候不同步&#xff1f; 3.1 经过React包装的onClick点击事件&#xff08;&#xff09; 3.2 没经过React包装的 原生点击事件 …

stm32学习笔记:USART串口通信

1、串口通信协议&#xff08;简介软硬件规则&#xff09; 全双工&#xff1a;打电话。半双工&#xff1a;对讲机。单工&#xff1a;广播 时钟&#xff1a;I2C和SPI有单独的时钟线&#xff0c;所以它们是同步的&#xff0c;接收方可以在时钟信号的指引下进行采样。串口、CAN和…

18 串口通讯

文章目录 18.0 前言18.1 串口通讯协议简介18.1.1 物理层 18.2 RT1052 的 LPUART 简介18.3 UART 功能框图18.3.1 中断控制 18.4 UART 初始化结构体详解18.4.1 baudRate_Bps18.4.2 parityMode18.4.3 dataBitsCount18.4.4 isMsb18.4.5 stopBitCount18.4.6 txFifoWatermark与rxFifo…

计算机体系结构基础复习

1. 计算机系统可划分为哪几个层次,各层次之间的界面是什么? 你认为这样划分层次的意义何在? 答&#xff1a; 计算机系统可划分为四个层次&#xff0c;分别是&#xff1a;应用程序、 操作系统、 硬件系统、 晶体管四个大的层次。 注意把这四个层次联系起来的三个界面。各层次…

WIndows系统重装、备份与恢复实操问题笔记

一 windows重装 1.1 基本步骤 下载大白菜根据官网使用教程制作启动u盘从MSDN或者微软官网下载Windows镜像根据查询的快捷键进入BIOS系统&#xff0c;设置U盘为第一启动 重装 1.2 Windows 11 激活 微软其实在2023年9月20日的公告中宣布停掉免费升级&#xff0c;数字激活工具…

使用pygame实现简单的烟花效果

import pygame import sys import random import math# 初始化 Pygame pygame.init()# 设置窗口大小 width, height 800, 600 screen pygame.display.set_mode((width, height)) pygame.display.set_caption("Fireworks Explosion")# 定义颜色 black (0, 0, 0) wh…

YOLOv7涨点改进:多层次特征融合(SDI),小目标涨点明显,| UNet v2,比UNet显存占用更少、参数更少

💡💡💡本文全网独家改进:多层次特征融合(SDI),能够显著提升不同尺度和小目标的识别率 💡💡💡在YOLOv7中如何使用 1)iAFF加入Neck替代Concat; 收录: YOLOv7高阶自研专栏介绍: http://t.csdnimg.cn/tYI0c ✨✨✨前沿最新计算机顶会复现 🚀🚀🚀YOL…

Linux远程登陆协议ssh

目录 一、SSH服务 1. ssh基础 2. 原理 3. 服务端配置 3.1 常用配置项 3.2 具体操作 3.2.1 修改默认端口号 3.2.2 禁止root用户登录 3.2.3 白名单列表 3.2.4 黑名单列表 3.2.5 使用秘钥对及免交互验证登录 3.2.6 免交互式登录 一、SSH服务 1. ssh基础 SSH&…

Microsoft Excel 直方图

Microsoft Excel 直方图 1. 数据示例2. 打开 EXCEL3. settings4. 单击直方图柱&#xff0c;右键“添加数据标签”References 1. 数据示例 2. 打开 EXCEL 数据 -> 数据分析 -> 直方图 3. settings 输入区域样本值、接受区域分类间距&#xff0c;输出选项选择“新工作表组…

玩转Mysql 八 (MySQ优化入门篇)

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。如有侵权&#xff0c;请留言&#xff0c;我及时删除&#xff01; 前言&#xff1a; 一个高性能&#xff0c;稳定的数据库集群并不是指的某一特性优化&#xff0c;就…

3 - AOP

1. 快速入门 1.1 基本说明 AOP(aspect oriented programming) &#xff0c;面向切面编程 切面类中声明通知方法&#xff1a; 前置通知&#xff1a;Before返回通知&#xff1a;AfterReturning异常通知&#xff1a;AfterThrowing后置通知&#xff1a;After环绕通知&#xff1…

并发List源码剖析

并发包中的并发List只有CopyOnWriteArrayList。 CopyOnWriteArrayList是一个线程安全的ArrayList,对其进行的修改操作都是在底层的一个复制的数组(快照)上进行的&#xff0c;也就是使用了写时复制策略。 在CopyOnWriteArrayList的类图中&#xff0c;每个CopyOnWriteArrayList对…

(学习日记)2024.01.05:一份关于自行车定位的调研

写在前面&#xff1a; 由于时间的不足与学习的碎片化&#xff0c;写博客变得有些奢侈。 但是对于记录学习&#xff08;忘了以后能快速复习&#xff09;的渴望一天天变得强烈。 既然如此 不如以天为单位&#xff0c;以时间为顺序&#xff0c;仅仅将博客当做一个知识学习的目录&a…

电流检测方法

电路检测电路常用于&#xff1a;高压短路保护、电机控制、DC/DC换流器、系统功耗管理、二次电池的电流管理、蓄电池管理等电流检测等场景。 对于大部分应用&#xff0c;都是通过感测电阻两端的压降测量电流。 一般使用电流通过时的压降为数十mV&#xff5e;数百mV的电阻值&…

BLDC 电机和 PMSM 的结构区别

BLDC 电机和 PMSM 的结构类似&#xff0c;其永磁体均置于转子&#xff0c;并被定义为同步电机。在同步电机中&#xff0c;转子与定子磁场同步&#xff0c;即转子的旋转速度与定子磁场相同。它们的主要区别在于其反电动势&#xff08;反 EMF&#xff09;的形状。电机在旋转时充当…