【LeetCode周赛】LeetCode第359场周赛

LeetCode第359场周赛

  • 判别首字母缩略词
  • k-avoiding 数组的最小总和
  • 销售利润最大化
  • 找出最长等值子数组

判别首字母缩略词

给你一个字符串数组 words 和一个字符串 s ,请你判断 s 是不是 words 的 首字母缩略词 。
如果可以按顺序串联 words 中每个字符串的第一个字符形成字符串 s ,则认为 s 是 words 的首字母缩略词。例如,“ab” 可以由 [“apple”, “banana”] 形成,但是无法从 [“bear”, “aardvark”] 形成。
如果 s 是 words 的首字母缩略词,返回 true ;否则,返回 false 。

示例 1:

输入:words = [“alice”,“bob”,“charlie”], s = “abc”
输出:true
解释:words 中"alice"、“bob” 和 “charlie” 的第一个字符分别是 ‘a’、‘b’ 和 ‘c’。因此,s = "abc"是首字母缩略词。

示例 2:

输入:words = [“an”,“apple”], s = “a”
输出:false
解释:words 中 “an” 和 "apple"的第一个字符分别是 ‘a’ 和 ‘a’。 串联这些字符形成的首字母缩略词是 “aa” 。 因此,s = “a” 不是首字母缩略词。

示例 3:

输入:words = [“never”,“gonna”,“give”,“up”,“on”,“you”], s = “ngguoy”
输出:true
解释:串联数组 words 中每个字符串的第一个字符,得到字符串 “ngguoy” 。 因此,s = "ngguoy"是首字母缩略词。

提示:
1 < = w o r d s . l e n g t h < = 100 1 <= words.length <= 100 1<=words.length<=100
1 < = w o r d s [ i ] . l e n g t h < = 10 1 <= words[i].length <= 10 1<=words[i].length<=10
1 < = s . l e n g t h < = 100 1 <= s.length <= 100 1<=s.length<=100
words[i] 和 s 由小写英文字母组成
思路:
简单模拟题,直接按照题意取出每个单词的首字母,拼接起来,判断和字符串s是否相等即可。
代码:

class Solution {
public:bool isAcronym(vector<string>& words, string s) {string res;for(auto word:words){res+=word[0];}return res==s;}
};

k-avoiding 数组的最小总和

给你两个整数 n 和 k 。
对于一个由不同正整数组成的数组,如果其中不存在任何求和等于 k 的不同元素对,则称其为 k-avoiding 数组。
返回长度为 n 的 k-avoiding 数组的可能的最小总和。
示例 1:

输入:n = 5, k = 4
输出:18
解释:设若 k-avoiding 数组为 [1,2,4,5,6] ,其元素总和为 18 。可以证明不存在总和小于 18 的 k-avoiding 数组。

示例 2:

输入:n = 2, k = 6
输出:3
解释:可以构造数组 [1,2] ,其元素总和为 3 。 可以证明不存在总和小于 3 的k-avoiding 数组。

提示:
1 < = n , k < = 50 1 <= n, k <= 50 1<=n,k<=50
思路:
简单模拟题,需要构造一个长度为n的数组,满足不存在求和等于k的两个元素。数据范围很小,那么直接从1开始枚举,将每个数插入数组之前,判断该数字插入是否会和之前的数字相加等于k,不会等于k才能插入数组中。
代码:

class Solution {
public:bool Find(vector<int>p,int x,int k){for(auto a:p){if(a==k-x)return 1;}return 0;}int minimumSum(int n, int k) {int x=1,sum=0;vector<int>p;while(p.size()<n){if(!Find(p,x,k)){sum+=x;p.push_back(x++);}else x++;}return sum;}
};

销售利润最大化

给你一个整数 n 表示数轴上的房屋数量,编号从 0 到 n - 1 。
另给你一个二维整数数组 offers ,其中 o f f e r s [ i ] = [ s t a r t i , e n d i , g o l d i ] offers[i] = [start_i, end_i, gold_i] offers[i]=[starti,endi,goldi] 表示第 i i i 个买家想要以 g o l d i gold_i goldi 枚金币的价格购买从 s t a r t i start_i starti e n d i end_i endi 的所有房屋。
作为一名销售,你需要有策略地选择并销售房屋使自己的收入最大化。
返回你可以赚取的金币的最大数目。
注意 同一所房屋不能卖给不同的买家,并且允许保留一些房屋不进行出售。

示例 1:

输入:n = 5, offers = [[0,0,1],[0,2,2],[1,3,2]]
输出:3
解释:有 5 所房屋,编号从 0 到4 ,共有 3 个购买要约。 将位于 [0,0] 范围内的房屋以 1 金币的价格出售给第 1 位买家,并将位于 [1,3] 范围内的房屋以2 金币的价格出售给第 3 位买家。 可以证明我们最多只能获得 3 枚金币。

示例 2:

输入:n = 5, offers = [[0,0,1],[0,2,10],[1,3,2]]
输出:10
解释:有 5 所房屋,编号从 0 到4 ,共有 3 个购买要约。 将位于 [0,2] 范围内的房屋以 10 金币的价格出售给第 2 位买家。 可以证明我们最多只能获得 10枚金币。

提示:
1 < = n < = 1 0 5 1 <= n <= 10^5 1<=n<=105
o f f e r s [ i ] . l e n g t h = = 3 offers[i].length == 3 offers[i].length==3
0 < = s t a r t i < = e n d i < = n − 1 0 <= starti <= endi <= n - 1 0<=starti<=endi<=n1
1 < = g o l d i < = 1 0 3 1 <= goldi <= 10^3 1<=goldi<=103

思路:
动态规划,dp[i+1]表示购买编号不超过i的房屋所能获得的最大利益。

  • 若不购买, d p [ i + 1 ] = d p [ i ] dp[i+1]=dp[i] dp[i+1]=dp[i]
  • 若购买,那么遍历所有 e n d j = i end_j=i endj=i的买家请求, d p [ i + 1 ] = m a x ( d p [ i + 1 ] , d p [ s t a r t j ] + g o l d j ) dp[i+1]=max(dp[i+1],dp[start_j]+gold_j) dp[i+1]=max(dp[i+1],dp[startj]+goldj)
    可以先将所有相同房屋结尾的购买请求,通过结尾房屋编号存储起来。
    d p [ i + 1 ] = m a x { d p [ i ] 不购买 i 房屋 d p [ i + 1 ] = d p [ s t a r t j ] + g o l d j 购买 i 房屋 dp[i+1]=max\begin{cases} dp[i] & 不购买i房屋 \\ dp[i+1]=dp[start_j]+gold_j & 购买i房屋 \\ \end{cases} dp[i+1]=max{dp[i]dp[i+1]=dp[startj]+goldj不购买i房屋购买i房屋

代码:

class Solution {
public:int maximizeTheProfit(int n, vector<vector<int>>& offers){//dp[i]维护的是只卖到第i个房子的收益vector<vector<pair<int, int>>>tmp(n);for(auto offer:offers){tmp[offer[1]].push_back({offer[0],offer[2]});}int dp[n+1];//dp[i+1]维护的就是买到第i个房子的收益memset(dp,0,sizeof(dp));for(int i=0;i<n;i++){dp[i+1]=dp[i];//不买第i个房子,那么其收益最大就是dp[i]for(auto pii:tmp[i]){int start=pii.first,gold=pii.second;//买第i个房子dp[i+1]=max(dp[i+1],dp[start]+gold);}}return dp[n];}
};

找出最长等值子数组

给你一个下标从 0 开始的整数数组 nums 和一个整数 k 。
如果子数组中所有元素都相等,则认为子数组是一个 等值子数组 。注意,空数组是 等值子数组 。
从 nums 中删除最多 k 个元素后,返回可能的最长等值子数组的长度。
子数组 是数组中一个连续且可能为空的元素序列。

示例 1:

输入:nums = [1,3,2,3,1,3], k = 3
输出:3
解释:最优的方案是删除下标 2 和下标 4 的元素。删除后,nums 等于 [1, 3, 3, 3] 。 最长等值子数组从 i = 1 开始到 j = 3 结束,长度等于 3 。可以证明无法创建更长的等值子数组。

示例 2:

输入:nums = [1,1,2,2,1,1], k = 2
输出:4
解释:最优的方案是删除下标 2 和下标 3 的元素。 删除后,nums 等于 [1, 1, 1, 1] 。 数组自身就是等值子数组,长度等于 4 。 可以证明无法创建更长的等值子数组。

提示:
1 < = n u m s . l e n g t h < = 1 0 5 1 <= nums.length <= 10^5 1<=nums.length<=105
1 < = n u m s [ i ] < = n u m s . l e n g t h 1 <= nums[i] <= nums.length 1<=nums[i]<=nums.length
0 < = k < = n u m s . l e n g t h 0 <= k <= nums.length 0<=k<=nums.length

分析:
分析题意,得知题目的目的就是需要删除每两个相同的数字之间不同的数,在删除k次的情况下,使得连续的相同的数字最多。那么我们可以存储每一个数字出现的位置。对于每一个数字,因为我们找到删除后,连续的该数字最多,比如说,对数字1,我们可以先维护出每两个1之间的距离,那么我们的目的就是要找到一串距离,使得距离和小于k,且距离的个数最多。显然可以用滑动窗口的方法,获得满足条件的答案。
代码:

class Solution {
public:const int MAXN = 1e5+5;int longestEqualSubarray(vector<int>& nums, int k) {if(nums.size()==1)return 1;vector<int>p[MAXN];for(int i=0;i<nums.size();i++){p[nums[i]].push_back(i);//先维护一下每个数字的位置}int res=1;for(int i=1;i<=nums.size();i++){int cnt=0,ans=0;vector<int>q;for(int j=1;j<p[i].size();j++){//维护每个数字两两之间的距离q.push_back(p[i][j]-p[i][j-1]-1);}for(int l=0,r=0;r<q.size();){//双指针,得到最多的距离cnt+=q[r++];while(cnt>k)cnt-=q[l++];ans=max(ans,r-l+1);}res=max(res,ans);}return res;}
};

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

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

相关文章

css-grammar

语法格式 选择器 {属性名称 : 属性值; 属性名称 : 属性值;...}语法特点: CSS声明总是以键值对(key\value)形式存在。CSS声明总是以分号(;)结束。声明组以大括号({})括起来。为了让CSS可读性更强&#xff0c;每行只描述一个属性。 CSS 注释 注释是用来解释你的代码&#xff…

vue Cesium接入在线地图

Cesium接入在线地图只需在创建时将imageryProvider属性换为在线地图的地址即可。 目录 天地图 OSM地图 ArcGIS 地图 谷歌影像地图 天地图 //矢量服务let imageryProvider new Cesium.WebMapTileServiceImageryProvider({url: "http://t0.tianditu.com/vec_w/wmts?s…

大数据组件-Flume集群环境的启动与验证

&#x1f947;&#x1f947;【大数据学习记录篇】-持续更新中~&#x1f947;&#x1f947; 个人主页&#xff1a;beixi 本文章收录于专栏&#xff08;点击传送&#xff09;&#xff1a;【大数据学习】 &#x1f493;&#x1f493;持续更新中&#xff0c;感谢各位前辈朋友们支持…

【python爬虫】中央气象局预报—静态网页图像爬取练习

静态网页爬取练习 中央气象局预报简介前期准备步骤Python爬取每日预报结果—以降水为例 中央气象局预报简介 中央气象台是中国气象局&#xff08;中央气象台&#xff09;发布的七天降水预报页面。这个页面提供了未来一周内各地区的降水预报情况&#xff0c;帮助人们了解即将到来…

深入学习 cnf问题 和 SAT 算法

前言 SAT问题是一个重要的计算机科学和人工智能问题&#xff0c;它涉及在给定的布尔变量集合和子句集合下&#xff0c;确定是否存在一种变量赋值使得整个合取范式成为真。这个问题在实际应用中有广泛的用途&#xff0c;包括硬件设计、安全协议验证等。 怎么看待 cnf cnf 文件本…

如何高效地设计测试用例并评审

编写出好的测试用例是每一个测试工程师的职责&#xff0c;但在实际工作中大家写的测试用例往往需要不断地修改才能使用&#xff0c;这不仅浪费了时间&#xff0c;还容易让测试工程师产生自我否定的情绪&#xff0c;甚至在团队中产生各种矛盾。 那如何高效地设计测试用例呢&…

【pyqt5界面化工具开发-14】初始牛刀-登录工具

目录 0x00 前言&#xff1a; 一、准备好ui的加载 二、获取对应的触发事件 三、触发事件绑定 三、输入内容的调用 三、完善登录逻辑 0x00 前言&#xff1a; 在逻辑代码的处理添加数据包的请求&#xff0c;返回数据包的判断&#xff0c;就可以完整实现登录检测的一个界面化…

Android.mk开发模板

今天简单写了一个 Android.mk 的示例模板&#xff0c;供初学者参考。 本模板主要给大家示例 Android NDK 开发中的如下几个问题&#xff1a; 如何自动添加需要编译的源文件列表如何添加第三方静态库、动态库的依赖如何构造一个完整的NDK工程框架 假设我们的项目依赖 libmath.…

前后端分离不存在会话,sessionid不一致问题

目录 1.使用拦截器解决跨域的示例&#xff1a; 2.使用redis&#xff0c;不使用session 前后端不分离项目我们可以通过session存储数据&#xff0c;但是前后端分离时不存在会话&#xff0c;每次请求sessionid都会改变&#xff0c;当值我们储存的数据不能取出来。 1.使用拦截器…

stable diffusion实践操作-webUI教程-不是基础-是特例妙用

系列文章目录 stable diffusion实践操作 提示&#xff1a;写完文章后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 系列文章目录前言一、SD webUI是什么&#xff1f;二、详细教程1. 相关插件安装1.1. 提示词插件安装和使用1.2. upscale 放…

Rust 进阶学习

Rust 进阶学习 文章目录 Rust 进阶学习所有权作用域移动和克隆涉及函数的所有权机制涉及参数的所有权涉及返回值的所有权 引用和租借可变引用 枚举类枚举成员的属性枚举匹配 结构体结构体方法结构体关联函数 错误处理不可恢复错误可恢复错误 Rust代码组织管理Module默认的Modul…

JavaScript原型链污染

前言 在浏览某个论坛的时候&#xff0c;第一次看到了JavaScript原型链污染漏洞。当时非常的好奇&#xff0c;当时我一直以为js作为一种前端语言&#xff0c;就算存在漏洞也是针对前端&#xff0c;不会危害到后端&#xff0c;因此我以为这种漏洞危害应该不大。可当我看到他的漏…

简明易懂:Python中的分支与循环

文章目录 前言分支结构if 语句&#xff1a;单一条件判断else语句&#xff1a;提供备选方案elif 语句&#xff1a;多条件判断嵌套的分支结构&#xff1a;复杂条件逻辑 循环结构for循环&#xff1a;遍历序列range()函数与for循环while循环&#xff1a;条件重复循环控制&#xff1…

PAT编程基础笔记

写在前面&#xff1a; 这篇文章是我之前刷PAT(Basic Level)随手记下来的几个记忆点&#xff0c;希望对大家有所帮助。 1.字符串和数值类型之间的转换&#xff1a; 如果要将数值类型如int、double、long转换为字符串string&#xff0c;可以使用to_string()函数 #include<s…

GA遗传算法

储备知识 GA算法主要解决数学模型中最优化的搜索算法&#xff0c;是进化算法中的一种&#xff0c;基因算法借鉴了自然界基因的遗传的主要现象&#xff0c;分别为遗传&#xff0c;变异&#xff0c;自然选择&#xff0c;杂交等。 GA算法参数 GA算法的参数如下所示。 种群规模…

剑指 Offer 62. 圆圈中最后剩下的数字(简单)

题目&#xff1a; class Solution { public:int lastRemaining(int n, int m) {int pos 0;for(int i2;i<n;i){pos (posm)%i;}return pos;} };作者&#xff1a;想吃火锅的木易 链接&#xff1a;详细题解 来源&#xff1a;力扣&#xff08;LeetCode&#xff09;

基于python的改进高斯混合模型的图割算法研究设计与实现

摘要 信息技术永远是改变生活的第一种创新方式&#xff0c;各种行业的发展更是脱离不了科技化的支持。原本传统的行业正在被科技行业的切入悄悄的发生变化。就拿我们生活当中常见的事情举例而言&#xff0c;在外卖行业还没有发展的快速的时候&#xff0c;方便面等速食成了快速吃…

ssh常用操作

ssh常用操作 SSH是一种安全协议&#xff0c;ssh是该协议的客户端程序&#xff0c;openssh-server则是该协议的服务端程序 常用系统都自带了ssh客户端程序&#xff0c;服务端程序则可能要安装 密码远程登陆 前提&#xff1a;服务器安装了openssh-server&#xff0c;未安装时…

安装bpftrace和bcc的踩坑记录

最后在Ubuntu22.04使用Ubuntu提供的安装命令完成了安装。这里是记录尝试在Ubuntu18.04和Ubuntu22.04使用源码安装未果的过程。 文章目录 22版本安装bcc准备工具安装命令使用报错&#xff1a;iovisor封装的安装方式ubuntu的安装方式 For Bionic (18.04 LTS)官方提供的源码安装准…

Tutorial: Mathmatical Derivation of Backpropagation

目录 1. 概要 2. Gradient Descent 3. Chain rule 3.1 单变量基本链式法则 3.2 单变量全微分链式法则 3.3 小贴士&#xff1a;微分、导数、导函数是什么关系&#xff1f; 4. What and why backpropagation? 5. Backpropagation for a simple neural network 5.1 基于…