LeetCode第380场周赛个人题解

目录

100162.最大频率元素计数

原题链接

思路分析

AC代码

100165.找出数组中的美丽下标I

原题链接

思路分析

AC代码

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

原题链接

思路分析

位运算+二分

AC代码

100207.找出数组中的美丽下标II

原题链接

思路分析

AC代码


100162.最大频率元素计数

原题链接

100162. 最大频率元素计数

思路分析

签到题没什么好说的,统计频次,最大频次为ma的话,记录频次为ma的数字个数

AC代码

class Solution {
public:int maxFrequencyElements(vector<int>& nums) {int hash[101]{0} , ma = 0 , ret = 0;for(auto x : nums)  ma = max(ma , ++hash[x]);for(auto x : hash) if(x == ma) ret += ma;return ret;}
};

100165.找出数组中的美丽下标I

原题链接

100165. 找出数组中的美丽下标 I

思路分析

和第四题一模一样,只不过第四题数据范围大,这道题为了省时间直接用python3跑的,没用C++敲KMP,具体题解看第四题

这道题由于数据量小,查一个i查一个j就行

AC代码

class Solution:def beautifulIndices(self, s: str, a: str, b: str, k: int) -> List[int]:idx = 0ret = []while idx < len(s):i = s.find(a , idx)if i == -1:breakj = s.find(b , i - k if i >= k else 0)if j != -1 and abs(j - i) <= k:ret.append(i)idx = i + 1return sorted(ret)

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

原题链接

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

思路分析

位运算+二分

写题解的时候瞄了眼力扣题解区那边一堆数位DP+二分的,其实个人感觉用不上数位DP其实就是一个位运算的小tip。

比赛的时候看到题目首先能想到二分,那么问题就落在了二分的可行性判断上。

对于给定一个数字num,如何求出1 到 num的价值和?

其实很容易算的,如果给你一个数字x,问你1到x有多少偶数,想都不用想是x / 2向下取整

如果是奇数,那就是x / 2 + (x & 1)

那么扩展为1到x有多少第i位(i从低到高)为1的数字呢?

假设mask = (1 << (i - 1)),注意1左移i - 1位得到的才是第i位为1

那么  sumi= (x / (mask << 1)) * mask + ((mask & x) ? ((x & (mask - 1)) + 1) : 0)

逐步分析下这个方程什么意思:

加号右边:如果第i位为0,那就不说了,第i位为1假设从最高位到第0位为:xxxxx1xxxxx,那么

从xxxxx100000 ~ xxxxx1xxxxx都是第i位为1,且都不超过x

加号左边:0到x包含了 00000 1 00000~00000 1 11111、00001 1 00000 ~ 00001 1 11111……

其实就是算比第i位高的位的贡献,一个位贡献了1 << i

那么我们可以在O(1)内计算出给定范围内i位为1的数字数目,继而能在O(C)内算出每一位为1的数字数目,其中C为x的位数

那么二分的check函数就能写出来了,二分跑一下即可

AC代码

class Solution {
public:typedef long long ll;const ll maxn = 1e15;bool check(ll x, ll k, ll y){ll s = 0, mask = (1LL << (y - 1));while (mask <= x) {s += (x / (mask << 1)) * mask + ((mask & x) ? ((x & (mask - 1)) + 1) : 0);mask <<= y;}return s <= k;}long long findMaximumNumber(long long k, int x) {ll l = 0, r = maxn , ans = 0;while (l < r){ll mid = (l + r) >> 1;if (check(mid, k, x))ans = mid , l = mid + 1;elser = mid;}return ans;}
};

100207.找出数组中的美丽下标II

原题链接

100207. 找出数组中的美丽下标 II

思路分析

我们通过KMP可以O(n)求出s中所有子串a的下标,也可以求出所有子串b的下标

(就是KMP常用操作,把子串后面添加一个非法字符,这样next数组就变成长度为模式串的了,匹配到一个模式串,模式串就回退就行)

假如我们数组idxa存了子串a的下标,idxb存了子串b的下标

对于idxa中每一个i,我们都在idxb去二分查找一个在i上下浮动k范围内的j,然后记录即可

这样甚至不用排序了还

整体而言这道题比上一道简单,因为上一道check函数细节很容易错

就是KMP板子题

AC代码

void get_nextval(const string& src, vector<int>& nextval)
{int j = 0, k = -1;nextval[0] = -1;while (j < (int)src.size() - 1){if (k == -1 || src[j] == src[k]){j++; k++;if (src[j] != src[k])nextval[j] = k;elsenextval[j] = nextval[k];}else{k = nextval[k];}}
}int index_KMP(vector<int>& idx , vector<int>& next, const string& dst, const string& src, int pos = 0)
{int i = pos, j = 0;while (i < (int)dst.size() && j < (int)src.size()){if (j == -1 || dst[i] == src[j]){i++; j++;if(j == (int)src.size())idx.emplace_back(i - j) , j = next[j];}else{j = next[j];}}if (j == (int)src.size())return i - j;elsereturn -1;
}
class Solution {
public:Solution(){ios::sync_with_stdio(false);cin.tie(0), cout.tie(0);}vector<int> beautifulIndices(const string& s, const string& a, const string& b, int k) {int n = s.size();vector<int> ret, idxa, idxb;string aa(a + "#") , bb(b + "#");vector<int> nxt1(a.size() + 1), nxt2(b.size() + 1);get_nextval(aa, nxt1), get_nextval(bb, nxt2);;index_KMP(idxa , nxt1, s, a, 0);index_KMP(idxb , nxt2, s, b, 0);if (idxa.empty() || idxb.empty()) return {};for (auto x : idxa){auto it = lower_bound(idxb.begin(), idxb.end(), x >= k ? x - k : 0);if (it == idxb.end()) continue;if (abs(x - *it) <= k) ret.emplace_back(x);}return ret;}
};

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

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

相关文章

51-13 多模态论文串讲—BEiT v3 论文精读

BEiT-3的核心思想是将图像建模为一种语言&#xff0c;这样我们就可以对图像、文本以及图像-文本对进行统一的mask modeling。Multi-way transformer模型可以有效地完成不同的视觉和视觉语言任务&#xff0c;使其成为通用建模的一个有效选择。 同时&#xff0c;本文也对多模态大…

K8s-Pod资源(一)Pod介绍、创建Pod、Pod简单资源配额

Pod概述 Kubernetes Pod | Kubernetes Pod是Kubernetes中的最小调度单元&#xff0c;k8s都是以pod的方式运行服务的 一个pod可以指定镜像&#xff0c;封装一个或多个容器 pod需要调度到工作节点运行&#xff0c;节点的选择由scheduler调度器实现 pod定义时&#xff0c;会…

Android Studio 如何设置中文

Android Studio 是一个为 Adndroid 平台开发程序的集成开发环境&#xff08;IDE&#xff09;。 如何安装中文插件 在 Jetbrains 家族的插件市场上&#xff0c;是能够搜到语言包插件的&#xff0c;正常情况下安装之后只需要重启即可享受中文界面&#xff0c;可AndroidStudio 中…

Python 列表、元组、字典区别

1.列表、元组和字典都是序列 2.列表字典可以修改和删除序列中的某个元素&#xff0c;而元组就是一个整体&#xff0c;不能修改和删除&#xff0c;一定要修改或删除的话&#xff0c;只能修改和删除整个元组。 3.既然元组不能删除和修改&#xff0c;有什么作用呢&#xff1f; 1…

视频剪辑软件Camtasia2024最新版本快捷键大全

Camtasia Studio是一款专门录制屏幕动作的工具&#xff0c;它能在任何颜色模式下轻松地记录 屏幕动作&#xff0c;包括影像、音效、鼠标移动轨迹、解说声音等等。 今天来给大家介绍一下Camtasia快捷键的相关内容&#xff0c;Camtasia也是一个十分好用的电脑屏幕录制与视频剪辑…

Linux系统——远程访问及控制

目录 一、OpenSSH服务器 1.SSH&#xff08;Secure Shell&#xff09;协议 2.OpenSSH 2.SSH原理 2.1公钥传输原理 2.2加密原理 &#xff08;1&#xff09;对称加密 &#xff08;2&#xff09;非对称加密 2.3远程登录 2.3.1延伸 2.3.2登录用户 3.SSH格式及选项 3.1延…

Pod调度

在默认情况下&#xff0c;一个Pod在哪个Node节点上运行&#xff0c;是由Scheduler组件采用相应的算法计算出来的&#xff0c;这个过程是不受人工控制的。但是在实际使用中&#xff0c;这并不满足的需求&#xff0c;因为很多情况下&#xff0c;我们想控制某些Pod到达某些节点上&…

跟我学c++高级篇——基础类型和POD结构体反射

一、基础类型反射 在前面以枚举体和函数进行了反射的实践&#xff0c;在其中也提到过&#xff0c;其实更应该进行反射的是类&#xff08;结构体&#xff09;。毕竟现在以面向对象编程基本已经普及&#xff0c;类&#xff08;结构体&#xff09;的应用几乎已经是无法避免的。所…

高斯Hack算法

背景 刷leetcode时&#xff0c;碰到一题需要求解n个bit中选择m个bit的所有组合集&#xff0c;我只想到了递归求解&#xff0c;没啥问题&#xff0c;但是在官方题解中看到了牛逼的方法(Gospers Hack)&#xff0c;故记录一下。 4bit中2个1的情况 0011b0101b0110b1001b1010b1100b…

基于协同过滤的零食推荐系统

介绍 协同过滤算法&#xff1a;协同过滤是推荐系统中比较常用的算法之一&#xff0c;其核心思想是寻找用户之间的相似性&#xff0c;通过发现用户之间的共性&#xff0c;向用户推荐可能喜欢的商品或服务。Python Django Vue&#xff1a;Django 是一个基于 Python 的 Web 开发框…

模型的权值平均的原理和Pytorch的实现

一、前言 模型权值平均是一种用于改善深度神经网络泛化性能的技术。通过对训练过程中不同时间步的模型权值进行平均&#xff0c;可以得到更宽的极值点&#xff08;optima&#xff09;并提高模型的泛化能力。 在PyTorch中&#xff0c;官方提供了实现模型权值平均的方法。 这里…

遥感类SCI期刊_一区二区汇总

IEEE Geoscience And Remote Sensing Magazine(Ieee地球科学与遥感杂志) h-index:19 CiteScore:17.80 1区 IEEE Geoscience and Remote Sensing Magazine | IEEE Xplore Remote Sensing Of Environment(环境遥感) h-index:238 CiteScore:24.80 1区 https://www.scienced…

深度学习15—(迁移学习)冻结和解冻神经网络模型的参数

冻结与解冻代码&#xff1a; def freeze_net(net):if not net:returnfor p in net.parameters():p.requires_grad Falsedef unfreeze_net(net):if not net:returnfor p in net.parameters():p.requires_grad True 这段代码定义了两个函数&#xff1a;freeze_net 和 unfree…

webview全屏处理,即插即用

去年双十一有个直播的需求&#xff0c;听起来很简单&#xff0c;技术也都很成熟&#xff0c;但是真的开始实现后&#xff0c;还是有不少坑的&#xff0c;首先第一个uc内核不支持webRTC协议&#xff0c;需要重新开发chrome内核的webview&#xff0c;其次webview全屏处理、悬浮窗…

PYTHON通过跳板机巡检CENTOS的简单实现

实现的细节和引用的文件和以前博客记录的基本一致 https://shaka.blog.csdn.net/article/details/106927633 差别在于,这次是通过跳板机登陆获取的主机信息,只记录差异的部份 1.需要在跳板机相应的路径放置PYTHON的脚本resc.py resc.py这个脚本中有引用的文件(pm.sh,diskpn…

查询速度提升15倍!银联商务基于 Apache Doris 的数据平台升级实践

本文导读&#xff1a; 在长期服务广大规模商户的过程中&#xff0c;银联商务已沉淀了庞大、真实、优质的数据资产数据&#xff0c;这些数据不仅是银联商务开启新增长曲线的基础&#xff0c;更是进一步服务好商户的关键支撑。为更好提供数据服务&#xff0c;银联商务实现了从 H…

EI级 | Matlab实现VMD-TCN-LSTM变分模态分解结合时间卷积长短期记忆神经网络多变量光伏功率时间序列预测

EI级 | Matlab实现VMD-TCN-LSTM变分模态分解结合时间卷积长短期记忆神经网络多变量光伏功率时间序列预测 目录 EI级 | Matlab实现VMD-TCN-LSTM变分模态分解结合时间卷积长短期记忆神经网络多变量光伏功率时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.【E…

Springboot3新特性:开发第一个 GraalVM 本机应用程序(完整教程)

在讲述之前&#xff0c;各位先自行在网上下载并安装Visual Studio 2022&#xff0c;安装的时候别忘了勾选msvc 概述&#xff1a;GraalVM 本机应用程序&#xff08;Native Image&#xff09;是使用 GraalVM 的一个特性&#xff0c;允许将 Java 应用程序编译成本机二进制文件&am…

AI-数学-高中-5.求函数解析式(4种方法)

原作者视频&#xff1a;函数】3函数解析式求法&#xff08;易&#xff09;_哔哩哔哩_bilibili 1.已知函数类型-待定系数法&#xff1a;先用待定系数法把一次或二次函数一般表达式写出来&#xff1b;再用“要变一起变”左右两边同时替换&#xff0c;计算出一般表达式的常数&…

18、golang时间管理

时间 时间是非常重要的&#xff0c;离开了时间&#xff0c;几乎没有哪个生产环境数据能够有意义。 在Go语言中&#xff0c;时间定义为Time结构体。 package mainimport ("fmt""time" )func main() {var t time.Now()fmt.Println(t) fmt.Printf("%…