LeetCode---126双周赛

题目列表

3079. 求出加密整数的和

3080. 执行操作标记数组中的元素

3081. 替换字符串中的问号使分数最小

3082. 求出所有子序列的能量和

一、求出加密整数的和

按照题目要求,直接模拟即可,代码如下

class Solution {
public:int sumOfEncryptedInt(vector<int>& nums) {int n=nums.size(),res=0;for(auto x:nums){int s = 0, mx = 0;while(x){mx=max(mx,x%10);s=s*10+1;x/=10;}res+=mx*s;}return res;}
};

二、执行操作标记数组中的元素

题目不难,依旧还是只需要模拟,但是代码量不少,要细心,思路如下:

对于每次查询的操作1:只要判断垓下标是否被标记,然后处理即可

对于每次查询的操作2:要把没有标记过的最小的k个数字标记,如果数字相同则下标小的先标记,很显然要排序(两个维度的排序---首先比较数值,其次比较下标),这里讲一个技巧:我们没必要将数值和下标打包在一起(即用pair)排序,我们可以直接对下标进行排序,具体看代码

如何表示一个数是否被标记?可以额外开一个数组,也可以直接在原数组上修改,将标记过的数记为-1

代码如下

class Solution {
public:vector<long long> unmarkedSumArray(vector<int>& nums, vector<vector<int>>& queries) {int n = nums.size(), m = queries.size();vector<long long> ans(m);vector<int>idx(n);long long s = 0;for(int i=0;i<n;i++) {idx[i]=i;s+=nums[i];}sort(idx.begin(),idx.end(),[&](int x,int y){return nums[x]!=nums[y]?nums[x]<nums[y]:x<y;});for(int i=0,j=0;i<m;i++){const auto& v = queries[i];int index = v[0], k = v[1];if(nums[index]>=0){s -= nums[index];nums[index] = -1;}while(k&&j<n){if(nums[idx[j]]<0){j++;continue;}s -= nums[idx[j]];nums[idx[j]]=-1;j++,k--;}ans[i]=s;}return ans;}
};

三、替换字符串中的问号使分数最小

这题是思维题:

首先我们要明白字母出现的顺序并不会影响它们对总分数的贡献(因为字母对分数的贡献仅仅只和该字母出现的次数有关,字母与其他字母之间是相互独立的),也就是说我们只要考虑每个 '?' 填哪个字母即可,根据cost的定义,我们优先考虑之前出现次数少的字母对 '?' 进行填充,当出现次数一样少时,我们优先考虑字典序小的字母,然后对选出的字母进行排序,最后按照 '?' 的位置进行替换即可。

代码如下

class Solution {
public:string minimizeStringValue(string s) {int n = s.size();string tmp;int cnt[26] = { 0 },c = 0;for(const auto& e:s){if(e!='?') cnt[e-'a']++;else c++;}auto cmp=[](const pair<int,int>& x,const pair<int,int>& y)->bool{return x.first!=y.first ? x.first > y.first : x.second > y.second;};priority_queue<pair<int,int>,vector<pair<int,int>>,decltype(cmp)> pq(cmp); //小堆for(int i=0;i<26;i++)pq.push({cnt[i],i});while(c--){auto [x,ch] = pq.top();pq.pop();pq.push({x+1,ch});tmp += 'a'+ch;}sort(tmp.begin(),tmp.end());for(int i=0,j=0;i<n;i++){if(s[i]=='?')s[i]=tmp[j++];}return s;}
};

四、求出所有子序列的能量和

这题找子序列中的子序列,看着很绕,其实就是找和为k的子序列能出现在多少个子序列中,即和为k的子序列做出的贡献,拿示例一举例:和为3的子序列有[1,2]和[3],其中[1,2]在2个子序列中出现,[3]在4个子序列中出现,所以答案为2+4=6。很显然每个和为3的子序列的贡献为2^(n-L),其中n为整个数组的长度,L为子序列的长度。

故答案的表达式为 sum(2^(n-L) * num_K_L) 1<=L<=n,num_K_L表示长为L,和为K的子序列个数

如何求长为L,和为K的子序列的个数?

这是一个背包问题,限制条件有两个:1、长为L  2、和为K

设f[i][L][c]表示前i个数中,长为L,和为c的子序列的个数

1、如果当前的数不在和为c的子序列中,则f[i][L][c]=f[i-1][L][c]

2、如果当前的数在和为c的子序列中,则f[i][L][c]=f[i-1][L-1][c-nums[i]]

所以f[i][L][c]=f[i-1][L][c]+f[i-1][L-1][c-nums[i-1]]

初始化:f[i][0][0]=1,因为长为0,和为0的子序列只能是空,只有一个

代码如下

class Solution {
public:int sumOfPower(vector<int>& nums, int k) {int n=nums.size();const int MOD = 1e9+7;int f[n+1][n+1][k+1];memset(f,0,sizeof(f));//f[i][L][j] = f[i-1][L][j] + f[i-1][L-1][j-nums[i]]for(int i=0;i<=n;i++)f[i][0][0]=1;for(int i=0;i<n;i++){for(int j=1;j<=k;j++){for(int L=1;L<=i+1;L++){f[i+1][L][j] = (f[i][L][j] + (j>=nums[i]?f[i][L-1][j-nums[i]]:0))%MOD;}}}long long ans = 0, pow2 = 1;for(int i=n;i>0;i--){ans = (ans + f[n][i][k]*pow2)%MOD;pow2 = pow2*2%MOD;}return ans%MOD;}
};// 优化空间
class Solution {
public:int sumOfPower(vector<int>& nums, int k) {int n=nums.size();const int MOD = 1e9+7;int f[n+1][k+1];memset(f,0,sizeof(f));f[0][0]=1;for(int i=0;i<n;i++){for(int j=k;j>=nums[i];j--){for(int L=1+i;L>0;L--){f[L][j] = (f[L][j] + f[L-1][j-nums[i]])%MOD;}}}long long ans = 0, pow2 = 1;for(int i=n;i>0;i--){ans = (ans + f[i][k]*pow2)%MOD;pow2 = pow2*2%MOD;}return ans%MOD;}
};

当然我们也可以根据题目直接定义状态:f[i][j]表示前i个数为数组的,元素和为k的能量值

1、如果nums[i]不在子序列和为k的序列中,那么它有选和不选两种可能,f[i+1][j]=f[i][j]*2

2、如果nums[i]在子序列和为k的序列中,那么它只能被选,f[i+1][j]=f[i][j-nums[i]]

举个例子[1,2,3],要求和为3,假设遍历到 i = 2 ,如果nums[i]=3不在我们想要的子序列中,那么它可以选,也可以不选,即f[i][j] * 2,如果nums[i]=3在我们想要的子序列中,那么它只能被选,即f[i][j-nums[i]]

所以状态转移方程为 f[i+1][j]=f[i][j] * 2+ f[i][j-nums[i]]

代码如下

class Solution {
public:int sumOfPower(vector<int>& nums, int k) {const int MOD=1e9+7;int n=nums.size();vector<vector<long long>>f(n+1,vector<long long>(k+1));f[0][0]=1;for(int i=0;i<n;i++){for(int j=0;j<=k;j++){f[i+1][j]=(f[i][j]*2+(j>=nums[i]?f[i][j-nums[i]]:0))%MOD;}}return f[n][k];}
};//优化空间
class Solution {
public:int sumOfPower(vector<int>& nums, int k) {const int MOD=1e9+7;int n=nums.size();vector<long long>f(k+1);f[0]=1;for(int i=0;i<n;i++){for(int j=k;j>=0;j--){f[j]=(f[j]*2+(j>=nums[i]?f[j-nums[i]]:0))%MOD;}}return f[k];}
};

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

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

相关文章

《剑指 Offer》专项突破版 - 面试题 88 : 动态规划的基础知识(C++ 实现)

目录 前言 面试题 88 : 爬楼梯的最少成本 一、分析确定状态转移方程 二、递归代码 三、使用缓存的递归代码 四、空间复杂度为 O(n) 的迭代代码 五、空间复杂度为 O(1) 的迭代代码 前言 动态规划是目前算法面试中的热门话题&#xff0c;应聘者经常在各大公司的面试中遇到…

JAVA——volatile,wait,notife

文章目录 volatile关键字简识jvm内存模型内存上的优化问题的产生volatile的作用 wait&#xff08;&#xff09;wait()的作用 notify&#xff08;&#xff09;notify的唤醒顺序 volatile关键字 volatile关键字可以保证内存的可见性&#xff0c;什么是内存的可见性呢&#xff1f…

Jenkins中支持maven构建遇到仓库报错问题

目的 Jenkins中支持maven构建(Jenkins使用docker安装&#xff09; 问题 1.构建一个maven项目 2.执行报错 /var/lib/jenkins/local_maven_repo/com/sx/root/1.0.4/root-1.0.4.pom.part.lock (No such file or directory) Failed to transfer Could not transfer artifact co…

Unity发布webgl之后打开PDF文件,不使用js,不和浏览器交互

创建一个按钮&#xff0c;然后点击就会打开 在webgl下要使用这样的路径拼接&#xff0c;不然就会报错。 btnBook.onClick.AddListener(() >{var uri new System.Uri(Path.Combine(Application.streamingAssetsPath "/Books", "文档.pdf"));Debug.Log…

是德科技keysight N1912A双通道功率计

181/2461/8938产品概述&#xff1a; Keysight(原Agilent) N1912A P系列双通道功率计可提供峰值、峰均比、平均功率、上升时间、下降时间、最大功率值、最小功率值以及宽带信号的统计数据。 Keysight(原Agilent) N1912A P系列双通道功率计, 可提供峰值、峰均比、平均功率、上升…

53、Qt/信号与槽、QSS界面设计20240322

一、使用手动连接&#xff0c;将登录框中的取消按钮使用qt4版本的连接到自定义的槽函数中&#xff0c;在自定义的槽函数中调用关闭函数 将登录按钮使用qt5版本的连接到自定义的槽函数中&#xff0c;在槽函数中判断ui界面上输入的账号是否为"admin"&#xff0c;密码是…

机器学习 - 训练模型

接着这一篇博客做进一步说明&#xff1a; 机器学习 - 选择模型 为了解决测试和预测之间的差距&#xff0c;可以通过更新 internal parameters, the weights set randomly use nn.Parameter() and bias set randomly use torch.randn(). Much of the time you won’t know what…

二叉树|112.路径总和

力扣题目链接 class Solution { private:bool traversal(TreeNode* cur, int count) {if (!cur->left && !cur->right && count 0) return true; // 遇到叶子节点&#xff0c;并且计数为0if (!cur->left && !cur->right) return false; …

程序员表白

啥&#xff1f;&#xff01;你说程序员老实&#xff0c;认真工作&#xff0c;根本不会什么表白&#xff01;那你就错了&#xff01;(除了我) 那今天我们就来讲一下这几个代码&#xff01;赶紧复制下来&#xff0c;这些代码肯定有你有用的时候&#xff01; 1.Python爱心代码 im…

Matlab使用教程(持续更新)

1. Matlab Matlab被广泛的应用在数据分析&#xff0c;汽车仿真&#xff0c;机器人以及医学研究等众多方面。 它可以帮助我们理解研究复杂的系统。 在60年代和70年代&#xff0c;计算机使得科学家和工程师完成了以前不可能进行的计算&#xff1b;但是需要懂得计算机编程。 C…

【Java开发过程中的流程图】

流程图由一系列的图形符号和箭头组成&#xff0c;每个符号代表一个特定的操作或决策。下面是一些常见的流程图符号及其含义&#xff1a; 开始/结束符号&#xff08;圆形&#xff09;&#xff1a;表示程序的开始和结束点。 过程/操作符号&#xff08;矩形&#xff09;&#xff…

【力扣hot100】128.最长连续序列

给定一个未排序的整数数组 nums &#xff0c;找出数字连续的最长序列&#xff08;不要求序列元素在原数组中连续&#xff09;的长度。 请你设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1&#xff1a; 输入&#xff1a;nums [100,4,200,1,3,2] 输出&#xff1a;4 解…

PLC与智能制造——蛋糕增大?谁来先行?

PLC的特点 图1 PLC的特点 PLC与智能制造 “中国制造2025”把智能制造作为自动化和信息化深度融合的主攻方向&#xff0c;其支撑在于强大的工业自动化系统&#xff0c;而PLC是工业自动化系统的“大脑”&#xff0c;它不仅可控制机械装备和生产线&#xff0c;还是信息的采集器和…

synchronized和lock的区别

文章目录 synchronized和lock的区别公平锁和非公平锁可重入锁 synchronized和lock的区别 synchronized 是java的一个关键字&#xff0c;源码在 jvm 中&#xff0c;用 c 语言实现&#xff0c;synchronized在发生异常时会自动释放占有的锁&#xff0c;因此不会出现死锁。 Lock 是…

线性代数基础概念和在AI中的应用

基本概念 线性代数是数学的一个分支&#xff0c;专注于向量、向量空间&#xff08;也称为线性空间&#xff09;、线性变换和矩阵的研究。这些概念在数据科学、人工智能、工程学和物理学等多个领域都有广泛应用。以下是这些基本概念的详细解释和它们在数据处理和AI中的应用。 …

社区热议!54.8k Star开源项目,GPT-4Free : 让GPT4免费不是梦

Hello&#xff0c;我是Aitrainee&#xff0c;GPT4Free就是最近传得沸沸扬扬的那个GPT4项目。大家都知道&#xff0c;虽然ChatGPT是免费的&#xff0c;但如果你想用到那些功能更强大的大模型&#xff0c;比如GPT-4、gemini-pro、claude&#xff0c;那就只能选择付费了。 但现在&…

C语言——程序拷贝文件

问题如下&#xff1a; 写一个程序拷贝文件&#xff1a; 使用所学文件操作&#xff0c;在当前目录下放一个文件data.txt&#xff0c;写一个程序&#xff0c;将data.txt文件拷贝一份&#xff0c;生成data_copy.txt文件。 基本思路&#xff1a; 打开文件data.txt&#xff0c;读…

【11】工程化

一、为什么需要模块化 当前端工程到达一定规模后,就会出现下面的问题: 全局变量污染 依赖混乱 上面的问题,共同导致了代码文件难以细分 模块化就是为了解决上面两个问题出现的 模块化出现后,我们就可以把臃肿的代码细分到各个小文件中,便于后期维护管理 前端模块化标准…

Flutter 事件传递简单概述、事件冒泡、事件穿透

前言 当前案例 Flutter SDK版本&#xff1a;3.13.2 本文对 事件传递只做 简单概述&#xff0c;主要讲解&#xff0c;事件传递过程中可能遇到的问题解决&#xff0c;比如 事件冒泡、事件穿透&#xff1b; 不是我偷懒&#xff0c;是自认为没有这几位写的详细、仔细&#xff0c…

防火墙在解决方案及典型项目中的应用

防火墙在解决方案及典型项目中的应用 防火墙作为基础安全防护产品&#xff0c;在各种解决方案、业务场景中配套应用&#xff0c;本节给出各类方案资料链接方便查阅。 防火墙在华为网络解决方案中的应用 解决方案 文档 主要应用 CloudFabric云数据中心网解决方案 资料专区…