第 380 场 LeetCode 周赛题解

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;elser = 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.mzph.cn/news/621957.shtml

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

相关文章

【如何在 GitHub上面找项目】【转载】

很多的小伙伴&#xff0c;经常会有这样的困惑&#xff0c;我看了很多技术的学习文档、书籍、甚至视频&#xff0c;我想动手实践&#xff0c;于是我打开了GitHub&#xff0c;想找个开源项目&#xff0c;进行学习&#xff0c;获取项目实战经验。这个时候很多小伙伴就会面临这样的…

【Docker篇】使用Docker操作镜像

文章目录 &#x1f6f8;镜像&#x1f33a;基本操作⭐docker --help⭐docker pull [ 参数 ]⭐docker images⭐docker save -- 导出⭐docker rmi -- 删除⭐docker load -- 导入 &#x1f6f8;镜像 镜像是指在计算机领域中&#xff0c;通过复制和创建一个与原始对象相似的副本的过…

typescript使用手册

安装依赖 yarn add typescript -dev使用 yarn tsc xxx.ts生成配置文件tsconfig.json yarn tsc --init原始数据类型 const a: string foobarconst b: number 100 // NaN Infinityconst c: boolean true // false// 在非严格模式&#xff08;strictNullChecks&#xff09;…

mysql原理--undo日志2

1.概述 上一章我们主要唠叨了为什么需要 undo日志 &#xff0c;以及 INSERT 、 DELETE 、 UPDATE 这些会对数据做改动的语句都会产生什么类型的 undo日志 &#xff0c;还有不同类型的 undo日志 的具体格式是什么。本章会继续唠叨这些 undo日志 会被具体写到什么地方&#xff0c…

软件测试|Pydantic详细介绍与基础入门

简介 Pydantic 是一个强大的 Python 库&#xff0c;用于数据验证和解析&#xff0c;特别是用于处理 JSON 数据。它的主要目标是使数据验证和解析变得简单、直观和可维护。本文将介绍 Pydantic 的基础知识&#xff0c;包括如何定义模型、验证数据以及处理错误。 什么是 Pydant…

VMware安装CentOS7虚拟机

VMware 安装 获取 VMware 安装包 下载地址&#xff1a;链接&#xff1a;https://pan.baidu.com/s/1ELR5NZa7rO6YVplZ1IUigw?pwdplz3 提取码&#xff1a;plz3 包括&#xff1a;当然&#xff0c;也可以自己去别的地方下载&#xff0c;WMware 版本都差不多&#xff0c;现在用的比…

快速排序学习笔记

代码框架 // 在数组nums将下标从left到right中进行从小到大排序// 原理是先将一个元素排好序&#xff0c;然后将其他的元素排好序void sort(int[] nums, int left, int right) {if (left > right) {return;}// 对数组nums[left,right]进行切分&#xff0c;使得nums[left,p-1…

软件测试|QtDesigner配置以及使用

简介 上一篇文章我们介绍了PyQt5环境的安装和配置&#xff0c;并且安装了Qt tools工具&#xff0c;本文我们将介绍如何使用Qt tools的QtDesigner如何使用。 QtDesigner 的启动和入门 打开我们的项目从顶部菜单栏选择&#xff1a;Tools -> ExternalTools -> QtDesigner…

基于TCP的半双工网络编程实践

首先我们先了解一下什么是半双工通信&#xff1f; 半双工数据传输允许数据在两个方向上传输&#xff0c;但是在某一时刻&#xff0c;只允许数据在一个方向上传输&#xff0c;它实际上是一种切换方向的单工通信。 TCP服务端代码&#xff1a; #include <stdio.h> #inclu…

Blob 和 File 的区别,以及 Blob、File、Base64 三种类型的相互转换

一、 Blob 和 File 的区别 Blob 和 File 都是 JavaScript 中用于处理二进制数据的对象&#xff0c;但它们有一些区别。 Blob 定义&#xff1a; Blob 表示不可变的、原始数据的类文件对象。它通常用于存储大块的二进制数据&#xff0c;比如图像、音频或视频文件等。 特点&…

如何在免费云Colab上使用扩散模型生成图片?

前言 在人工智能技术的迅猛发展下&#xff0c;内容生成领域也迎来了一系列创新的突破。其中&#xff0c;使用扩散模型&#xff08;如Stable Diffusion&#xff09;从文字生成图片的AI技术备受瞩目。这一技术的出现&#xff0c;为我们创造栩栩如生的图像提供了全新的可能性。本…

MongoDB - 库、集合、文档(操作 + 演示 + 注意事项)

目录 一、MongoDB 1.1、简介 a&#xff09;MongoDB 是什么&#xff1f;为什么要使用 MongoDB&#xff1f; b&#xff09;应用场景 c&#xff09;MongoDB 这么强大&#xff0c;是不是可以直接代替 MySQL &#xff1f; d&#xff09;MongoDB 中的一些概念 e&#xff09;Do…

k8s--动态pvc和pv

前情回顾 存储卷&#xff1a; emptyDir 容器内部&#xff0c;随着pod销毁&#xff0c;emptyDir也会消失 不能做数据持久化 hostPath&#xff1a;持久化存储数据 可以和节点上目录做挂载。pod被销毁了数据还在 NFS&#xff1a;一台机器&#xff0c;提供pod内容器所有的挂载点…

算法训练day11Leetcode20有效的括号1047删除字符串中所有相邻重复项150逆波兰表达式求值

今日学习的文章和视频链接 https://leetcode.cn/problems/valid-parentheses/description/ https://programmercarl.com/0020.%E6%9C%89%E6%95%88%E7%9A%84%E6%8B%AC%E5%8F%B7.html 20 有效的括号 题目描述 给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#…

使用emu8086实现——显示程序设计实验

一、实验目的 1. 掌握DOS系统功能调用的编程方法 2. 掌握汇编语言程序设计方法&#xff0c;自己编写程序&#xff0c;并调试运行验证结果。 二、实验内容 1.在显示器上的输出窗口显示A-Z共26个大写英文字母。 代码&#xff1a; datas segmentzimu db "A B C D E F G H …

git入门之本地操作

1、启动git命令输入 在想要建立仓库&#xff0c;建议的方式是在文件夹中右键单击&#xff0c;选择git bash here 2、初始化仓库命令&#xff1a;git init 3、查看仓库状态&#xff1a;git status 4、更新仓库特定文件&#xff1a;git add xxx 5、更新仓库所有文件&#xff1…

LLVM代码内容

1. LLVM简介 LLVM库包含所有LLVM顶层项目&#xff0c;可以分为以下几类&#xff1a; • LLVM核心库和附加内容 • 编译器和工具 • 运行时库 LLVM是一个编译器框架。LLVM作为编译器框架&#xff0c;是需要各种功能模块支撑起来的。可以将clang和lld都看做是LLVM的组成部分。…

老卫带你学---leetcode刷题(50. Pow(x, n))

50. Pow(x, n) 问题 实现 pow(x, n) &#xff0c;即计算 x 的整数 n 次幂函数&#xff08;即&#xff0c;xn &#xff09;。 示例 1&#xff1a; 输入&#xff1a;x 2.00000, n 10 输出&#xff1a;1024.00000 示例 2&#xff1a; 输入&#xff1a;x 2.10000, n 3 输出…

RandLA-Net导出onnx模型并使用onnxruntime推理

首先下载RandLA-Net工程&#xff1a;https://github.com/tsunghan-wu/RandLA-Net-pytorch 导出onnx模型 import torch from utils.config import ConfigSemanticKITTI as cfg from network.RandLANet import Networkmodel Network(cfg) checkpoint torch.load("./pret…

Pandas实战100例 | 案例 13: 数据分类 - 使用 `cut` 对数值进行分箱

案例 13: 数据分类 - 使用 cut 对数值进行分箱 知识点讲解 在数据分析中&#xff0c;将连续的数值数据分类成不同的区间&#xff08;或“分箱”&#xff09;是一种常见的做法。Pandas 提供了 cut 函数&#xff0c;它可以根据你指定的分箱边界将数值数据分配到不同的类别中。 …