【LeetCode周赛】LeetCode第364场周赛

目录

  • 最大二进制奇数
  • 美丽塔Ⅰ
  • 美丽塔Ⅱ

最大二进制奇数

给你一个 二进制 字符串 s ,其中至少包含一个 ‘1’ 。
你必须按某种方式 重新排列 字符串中的位,使得到的二进制数字是可以由该组合生成的 最大二进制奇数 。
以字符串形式,表示并返回可以由给定组合生成的最大二进制奇数。
注意 返回的结果字符串 可以 含前导零。
示例 1:

输入:s = “010”
输出:“001”
解释:因为字符串 s 中仅有一个 ‘1’ ,其必须出现在最后一位上。所以答案是 “001” 。

示例 2:

输入:s = “0101”
输出:“1001”
解释:其中一个 ‘1’ 必须出现在最后一位上。而由剩下的数字可以生产的最大数字是 “100”。所以答案是 “1001” 。

提示:

1 <= s.length <= 100
s 仅由 ‘0’ 和 ‘1’ 组成
s 中至少包含一个 ‘1’

分析:
不难想到,因为要求返回的是一个奇数,所以最后一位肯定是1,同时,要使得整个数最大,所以1的位置要尽可能在前面的位数上。直接模拟即可。
代码:

class Solution {
public:string maximumOddBinaryNumber(string s) {int zero=0,one=0;for(int i=0;i<s.size();i++){if(s[i]=='0')zero++;else one++;}string t="";while(one>1){t+="1";one--;}while(zero--)t+="0";t+="1";return t;}
};

美丽塔Ⅰ

给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。
你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。
如果以下条件满足,我们称这些塔是 美丽 的:
1 <= heights[i] <= maxHeights[i]
heights 是一个 山状 数组。
如果存在下标 i 满足以下条件,那么我们称数组 heights 是一个 山状 数组:
对于所有 0 < j <= i ,都有 heights[j - 1] <= heights[j]
对于所有 i <= k < n - 1 ,都有 heights[k + 1] <= heights[k]
请你返回满足 美丽塔 要求的方案中,高度和的最大值 。
示例 1:

输入:maxHeights = [5,3,4,1,1]
输出:13
解释:和最大的美丽塔方案为 heights = [5,3,3,1,1],这是一个美丽塔方案,因为:

  • 1 <= heights[i] <= maxHeights[i]
  • heights 是个山状数组,峰值在 i = 0 处。 13 是所有美丽塔方案中的最大高度和。

示例 2:

输入:maxHeights = [6,5,3,9,2,7]
输出:22
解释: 和最大的美丽塔方案为 heights =[3,3,3,9,2,2] ,这是一个美丽塔方案,因为:

  • 1 <= heights[i] <= maxHeights[i]
  • heights 是个山状数组,峰值在 i = 3 处。 22 是所有美丽塔方案中的最大高度和。

示例 3:

输入:maxHeights = [3,2,5,5,2,3]
输出:18
解释:和最大的美丽塔方案为 heights =[2,2,5,5,2,2] ,这是一个美丽塔方案,因为:

  • 1 <= heights[i] <= maxHeights[i]
  • heights 是个山状数组,最大值在 i = 2 处。 注意,在这个方案中,i = 3 也是一个峰值。 18 是所有美丽塔方案中的最大高度和。

提示:
1 < = n = = m a x H e i g h t s < = 1 0 3 1 <= n == maxHeights <= 10^3 1<=n==maxHeights<=103
1 < = m a x H e i g h t s [ i ] < = 1 0 9 1 <= maxHeights[i] <= 10^9 1<=maxHeights[i]<=109

分析:
根据此题n的数据范围,可以考虑暴力做法,对于一个山状数组,只要我们能够找到"山峰"这个点,山峰i的高度h[i]肯定是当前maxHeights[i]的值,然后往左边逐渐递减,左边每一个塔j的值h[j]=min(maxHeights[j],h[j+1])。同理,右边每一个塔j的值h[j]=min(maxHeights[j],h[j-1])。因此,可以暴力计算出以每个塔为"山峰"时,最大的高度和,从而计算出整体最大的高度和。
代码:

class Solution {
public:long long maximumSumOfHeights(vector<int>& maxHeights) {long long res=0;int n=maxHeights.size();vector<int>h(n+1);for(int i=0;i<n;i++){//取每一个为峰值long long ans=maxHeights[i];h[i]=maxHeights[i];for(int j=i-1;j>=0;j--){//左边递减int now=min(maxHeights[j],h[j+1]);h[j]=now;ans+=now;}for(int j=i+1;j<n;j++){//右边递减int now=min(maxHeights[j],h[j-1]);h[j]=now;ans+=now;}res=max(res,ans);}return res;}
};

美丽塔Ⅱ

给你一个长度为 n 下标从 0 开始的整数数组 maxHeights 。
你的任务是在坐标轴上建 n 座塔。第 i 座塔的下标为 i ,高度为 heights[i] 。
如果以下条件满足,我们称这些塔是 美丽 的:
1 <= heights[i] <= maxHeights[i]
heights 是一个 山状 数组。
如果存在下标 i 满足以下条件,那么我们称数组 heights 是一个 山状 数组:
对于所有 0 < j <= i ,都有 heights[j - 1] <= heights[j]
对于所有 i <= k < n - 1 ,都有 heights[k + 1] <= heights[k]
请你返回满足 美丽塔 要求的方案中,高度和的最大值 。
示例 1:

输入:maxHeights = [5,3,4,1,1]
输出:13
解释:和最大的美丽塔方案为 heights = [5,3,3,1,1],这是一个美丽塔方案,因为:

  • 1 <= heights[i] <= maxHeights[i]
  • heights 是个山状数组,峰值在 i = 0 处。 13 是所有美丽塔方案中的最大高度和。

示例 2:

输入:maxHeights = [6,5,3,9,2,7]
输出:22
解释: 和最大的美丽塔方案为 heights =[3,3,3,9,2,2] ,这是一个美丽塔方案,因为:

  • 1 <= heights[i] <= maxHeights[i]
  • heights 是个山状数组,峰值在 i = 3 处。 22 是所有美丽塔方案中的最大高度和。

示例 3:

输入:maxHeights = [3,2,5,5,2,3]
输出:18
解释:和最大的美丽塔方案为 heights =[2,2,5,5,2,2] ,这是一个美丽塔方案,因为:

  • 1 <= heights[i] <= maxHeights[i]
  • heights 是个山状数组,最大值在 i = 2 处。 注意,在这个方案中,i = 3 也是一个峰值。 18 是所有美丽塔方案中的最大高度和。

提示:
1 < = n = = m a x H e i g h t s < = 1 0 5 1 <= n == maxHeights <= 10^5 1<=n==maxHeights<=105
1 < = m a x H e i g h t s [ i ] < = 1 0 9 1 <= maxHeights[i] <= 10^9 1<=maxHeights[i]<=109

分析:
该题比美丽塔Ⅰ相比来说,就是数据范围变大了,同样,我们美丽塔Ⅰ的暴力做法,时间复杂度为 O ( N 2 ) O(N^2) O(N2),在当前n的范围下,是会TLE的。那么,我们可以在哪个地方减少时间的开销呢?
不难想到,主要的时间开销在枚举每一个塔作为山峰,以及计算每个塔作为山峰时,整体的一个最大高度和,都需要遍历n个塔,如果整体的高度和能够很快计算出来,可以减少时间的开销。
我们分析一下这个山状数组,当塔i作为山峰时,其高度为 h i h_{i} hi,即maxHeighs[i],如果左边的塔j的maxHeights[j]比它高,那么其高度也只能是 h i h_{i} hi,那么,我们往左边一直找,只要塔的maxHeights比 h i h_{i} hi高,那么该塔的高度就是 h i h_{i} hi,直到找到 m a x H e i g h t s [ j ] < h i maxHeights[j]<h_{i} maxHeights[j]<hi的塔j,那么此时到塔i的最大高度和 p r e [ i ] = ( i − j ) ∗ h [ i ] + p r e [ j ] pre[i]=(i-j)*h[i]+pre[j] pre[i]=(ij)h[i]+pre[j]。如果左边没有比i低的塔,那么此时到塔i的最大高度和 p r e [ i ] = i ∗ h [ i ] pre[i]=i*h[i] pre[i]=ih[i]
因此,对于塔i左边的塔,我们只需要能够快速找到第一个比 h i h_{i} hi矮的塔,即可维护一个最大的高度和。那么这个问题又变成了单调栈的解法,有一个类似的题,找一个数右边的最近最大的数下一个更大元素 I。对于本题,利用单调栈,每次将一个数入栈,然后凡是栈中比其大的数,都出栈,然后此时栈顶的数就是离他最近的比其小的数,单调栈里从栈顶开始是一个递减序列。(为什么出栈更大的数呢,因为出栈更大的数是对后续找左边更小的数是没有影响的,留下来的数都是最近最小的数字),这样就可以在线性时间内找到左边最近最小的数。
右边的塔的处理同理,最后枚举每一个点作为峰值,即可快速得到最大的高度和。
代码:

class Solution {
public://找到每一个maxHeights[i]左边最近的一个更小的值j,这一片都采用当前maxHeights[i]的值,然后再取j那边维护的值void cal(vector<long long>& p,vector<int>& maxHeights){int n=maxHeights.size();stack<int>st;for(int i=0;i<n;i++){while(!st.empty()&&maxHeights[st.top()]>=maxHeights[i])st.pop();if(st.empty())p[i]=(long long)(i+1)*maxHeights[i];//左边没有更小的值了,那么左边的高度和全是当前的maxHeights[i]else p[i]=(long long)(i-st.top())*maxHeights[i]+p[st.top()];//一直到左边这个比它小的值取当前的maxHeights[i],其他的值取之前维护好的st.push(i);}}long long maximumSumOfHeights(vector<int>& maxHeights) {int n=maxHeights.size();vector<long long>pre(n+1),suf(n+1);cal(pre,maxHeights);//找右边最近的最小的数 翻转一下,就是找左边最近最小的数reverse(maxHeights.begin(),maxHeights.end());cal(suf,maxHeights);long long ans=0;//枚举山峰for(int i=0;i<n;i++)ans=max(ans,pre[i]+suf[n-1-i]-maxHeights[n-1-i]);return ans;}
};

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

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

相关文章

CSS box-shadow阴影

1、语法 box-shadow: h-shadow v-shadow blur spread color inset; 值描述h-shadow必需的。水平阴影的位置。允许负值v-shadow必需的。垂直阴影的位置。允许负值blur可选。模糊距离spread可选。阴影的大小color可选。阴影的颜色。在CSS颜色值寻找颜色值的完整列表inset可选。…

【Git】Deepin提示git remote: HTTP Basic: Access denied 错误解决办法

git remote: HTTP Basic: Access denied 错误解决办法 1.提交代码的时候提示2. 原因3.解决方案 1.提交代码的时候提示 git remote: HTTP Basic: Access denied 错误解决办法 2. 原因 本地git配置的用户名、密码与gitlabs上注册的用户名、密码不一致。 3.解决方案 如果账号…

wordpress插件-免费的wordpress全套插件

在当今数字化时代&#xff0c;网站和博客已经成为信息传递、观点分享和商业交流的重要平台。在这个背景下&#xff0c;WordPress作为最受欢迎的内容管理系统之一&#xff0c;无疑扮演着至关重要的角色。然而&#xff0c;要保持一个成功的WordPress网站&#xff0c;不仅需要出色…

FPGA 图像缩放 千兆网 UDP 网络视频传输,基于RTL8211 PHY实现,提供工程和QT上位机源码加技术支持

目录 1、前言版本更新说明免责声明 2、相关方案推荐UDP视频传输--无缩放FPGA图像缩放方案我这里已有的以太网方案 3、设计思路框架视频源选择ADV7611 解码芯片配置及采集动态彩条跨时钟FIFO图像缩放模块详解设计框图代码框图2种插值算法的整合与选择 UDP协议栈UDP视频数据组包U…

JMM与JUC

1.JMM 问题1&#xff1a;请你谈谈你对Volatile的理解 Volatile 是java虚拟机提供轻量级的同步机制 1. 保证可见性 2. 不保证原子性 3. 禁止指令重排 1.1、什么是JMM JMM Java内存模型 不存在的东西&#xff0c;概念&#xff01;约定 &#xff01; 1.2、关于JMM的一些同…

Java实现使用多线程,实现复制文件到另一个目录,起不一样的名字,创建100万个数据

目录 1 需求2 实现 1 需求 我现在有一个300MB 的文件&#xff0c;想要根据这个文件&#xff0c;创建100万个大小一样的&#xff0c;名称不一样&#xff0c;如何实现&#xff0c;如何比较快点实现 2 实现 1 先准备好这个文件 2 准备好目录 3 写代码 private static void crea…

Vue之ElementUI实现登陆及注册

目录 ​编辑 前言 一、ElementUI简介 1. 什么是ElementUI 2. 使用ElementUI的优势 3. ElementUI的应用场景 二、登陆注册前端界面开发 1. 修改端口号 2. 下载ElementUI所需的js依赖 2.1 添加Element-UI模块 2.2 导入Element-UI模块 2.3 测试Element-UI是否能用 3.编…

12款爆款项目管理工具推荐

项目管理需要用到的工具有哪些&#xff1f;从操作难易程度、功能是否涵盖项目需求、价格等方面入手推荐Zoho Projects、Redmine、Teambition、Microsoft Project、Omniplan、Podio、Freedcamp、Teamweek、Gantt Project、Basecamp、Meister Task、Teamwork等12款项目管理工具。…

DirectX 12 学习笔记 -结构

上篇文章我们创建了一个窗口&#xff0c;看样子还不难&#xff0c;我们继续玩DX12 引用一些文件 头文件 #include <d3d12.h> #include <dxgi1_4.h> #include <wrl.h>还有一些库 #pragma comment(lib, "d3d12.lib") #pragma comment(lib, "…

V4L2 驱动架构介绍

V4L2 简介 Video for Linux two(Video4Linux2)简称 V4L2&#xff0c;是 V4L 的改进版。V4L2 是 linux操作系统下用于视频和音频数据采集设备的驱动框架&#xff0c;为驱动和应用程序提供了一套统一的接口规范。 在 Linux 下&#xff0c;所有外设都被看成一种特殊的文件&#xf…

python使用mitmproxy和mitmdump抓包之拦截和修改包(四)

我认为mitmproxy最强大的地方&#xff0c;就是mitmdump可以结合python代码&#xff0c;灵活拦截和处理数据包。 首先&#xff0c;mitmdump的路径如下&#xff1a;&#xff08;使用pip3 install mitmproxy安装的情况&#xff0c;参考我的文章python使用mitmproxy和mitmdump抓包…

红黑树是如何实现的?

文章目录 一、红黑树的概念二、红黑树的性质三、红黑树和AVL树对比四、红黑树的插入1. 红黑树的结点定义2. 父亲的颜色3. 叔叔的颜色为红色4. 叔叔不存在5. 叔叔存在且为黑6. 插入的抽象图 五、红黑树的验证1. 检查平衡2. 计算高度与旋转次数3. 验证 六、 红黑树与AVL树的比较 …

基于单片机的煤气泄漏检测报警装置设计

一、项目介绍 煤气泄漏是一种常见的危险情况&#xff0c;可能导致火灾、爆炸和人员伤亡。为了及时发现煤气泄漏并采取相应的安全措施&#xff0c;设计了一种基于单片机的煤气泄漏检测报警装置。 主控芯片采用STM32F103C8T6作为主控芯片&#xff0c;具有强大的计算和控制能力。…

[H5动画制作系列 ]变量,帧频,监听器等的生命周期基础测试

模式:按照上述抓图,actions层&#xff0c;1帧,写初始化代码,10帧写返回代码到2帧代码,2-10帧之间一直循环。1帧及10帧代码如下&#xff1a; 如果程序在1-10之间循环,会反复创建变量i,多个监听器等。所以,第一帧最好执行一次即可&#xff0c;程序在2-10帧之间一直循环。

MySQL Installer is running in Community mode

每天很准时的弹出&#xff1a; 这是由于检查MySql并且更新的一个定时任务&#xff0c;没有更新成功导致 解决办法&#xff1a;禁用定时任务 1.先关闭错误框 2.打开控制面板 &#xff0c;使用小图标查看 3. 打开管理工具&#xff0c;双击打开任务计划程序 4.双击进入&#xf…

epoll与socket缓冲区的恩恩怨怨

文章目录 前言一、什么是socket缓冲区二、阻塞与非阻塞内核缓冲区1、如果发送缓冲区满了会怎么样阻塞非阻塞 2、如果接受缓冲区为空会怎么样阻塞非阻塞 三、epoll与缓冲区的恩恩怨怨水平触发边缘触发非阻塞阻塞 结论 前言 本文深挖网络编程中的缓冲区&#xff0c;从什么是缓冲…

数据结构 | 树

树 树是n&#xff08;n>0&#xff09;个结点的有限集。当n 0时&#xff0c;称为空树。在任意一棵非空树中应满足&#xff1a; 有且仅有一个特定的称为根的结点。当n>1时&#xff0c;其余节点可分为m&#xff08;m>0&#xff09;个互不相交的有限集T1,T2,…,Tm&#…

【Android】线程下载资源保证资源到位采用了 OkHttp的三方网络下载 文件缓存策略

背景 使用 SVGA的三方的url播放方式会比较慢&#xff0c;至少延迟3s以上才会出现svga效果&#xff0c;所以改变策略&#xff1a;将线上的svga全部下载到本地进行播放&#xff0c;那么就得将采用网络缓存的方式实现效果。 实现 那么就得实现以下几点&#xff1a; 初次下载缓…

专栏更新情况:华为流程、产品经理、战略管理、IPD

目录 前言 01 华为流程体系入门课 CSDN学院 02 产品经理进阶课 CSDN学院 03 BLM 战略方法论进阶课 04 IPD 进阶 100 例专栏 作者简介 前言 已上线四大课程专栏更新情况&#xff1a; 01 华为流程体系入门课&#xff08;视频图文&#xff09;&#xff1b; 02 硬件产品经…

UE4/5数字人MetaHuman通过已有动画进行修改

目录 通过已有动画修改动画 开始制作 创建一个关卡序列 将动画序列烘焙到控制绑定 打开我们自己创建的动画序列 之后便是烘焙出来 通过已有动画修改动画 首先架设我们已经有相关的MetaHuman的动画&#xff0c;但是这个动画因为是外部导入进来的&#xff0c;所以可能会出…