【LeetCode】力扣364.周赛题解

news2024/11/25 21:30:36

在这里插入图片描述
Halo,这里是Ppeua。平时主要更新C++,数据结构算法,Linux与ROS…感兴趣就关注我bua!
img

1.最大二进制奇数

🍉题目:image-20230924231011246

🍉例子:

image-20230924231101415

🍉 题解:

首先看题目,最大二进制奇数,在一个二进制表示法当中,只要最后一位为1,这个数就是奇数,将一个字符串中原有的一重新排列组合,将1尽可能的放到高位.最后留一位放在低位即可.

假设给定字符串中1的数量为cnt.那么我们想要达到的就是如下关系

d034fb0f22b9e1f048a60c95179d9e8

🍉代码解析:

具体思路如下:

  1. 遍历当前字符串,若为1则cnt++,并将当前位置置为0;

  2. 之后将低位也就是字符串的最后一位制成1,保证是奇数;

    这里不需要考虑字符串没有1的情况,因为题给条件保证一定有一个1

  3. 从高位遍历,依次将当前为置为1,直到cnt为0则停止

class Solution {
public:
    string maximumOddBinaryNumber(string s) {
        int  cnt=0;
        for(auto &ss:s)
        {
            if(ss=='1')cnt++;
            ss='0';
        }
        s[s.size()-1]='1';
        cnt--;
        for(int i=0;i<s.size()-1;i++)
        {
            if(cnt>0)
            {
                s[i]='1';
                cnt--;
            }
            else break;
        }
        return s;
    }
};

2. 2865. 美丽塔 I

🍉 题目:

image-20230925150702686

🍉示例:

image-20230925150842337

🍉题意:

先来分析下题目表达的意思:

给定一个maxHeights数组在其中选一个数为美丽塔的塔尖.塔的两边呈递减状态.

题给的maxHeights数组可以理解为是可以在这个地方建造美丽塔的最高高度,也就是塔高的上界.

当选择第i位maxHeights[i]为塔尖的时,则有[0][i-1]均小于maxHeights[i]、[i+1][n-1]均小于maxHeights[i].

对于[0]~[i-1]:则有s[i]<=s[i+1] (s为答案数组)

对于[i+1]~[n-1]:则有s[i+2]<=s[i+1] (s为答案数组)

具体关系如下图所示.

d7095ad16d241b02bd896186d382d98

根据数据范围来推算法

我们需要学会一个方法: 根据数据范围来推导使用什么算法,c++中1s可以处理的次数为1e7,也就是超过这个时间就会报超时

具体的有如下关系,(数据来自acwing)

一般ACM或者笔试题的时间限制是1秒或2秒。
在这种情况下,C++代码中的操作次数控制在 1e7 为最佳。

下面给出在不同数据范围下,代码的时间复杂度和算法该如何选择:

n≤30, 指数级别, dfs+剪枝,状态压缩dp
n≤100 => O(n3),floyd,dp
n≤1000 => O(n2),O(n2logn),dp,二分
n≤10000 => O(n∗√n),块状链表
n≤100000 => O(nlogn) => 各种sort,线段树、树状数组、set/map、heap、dijkstra+heap、spfa、求凸包、求半平面交、二分
n≤1000000 => O(n), 以及常数较小的 O(nlogn) 算法 => hash、双指针扫描、kmp、AC自动机,常数比较小的 O(nlogn) 的做法:sort、树状数组、heap、dijkstra、spfa
n≤10000000 => O(n),双指针扫描、kmp、AC自动机、线性筛素数
n≤109 => O(√n),判断质数
n≤1018 => O(logn),最大公约数

在做题中有意识的先看数据范围,可以极大的帮助解题

那么我们先看这一题的数据范围

image-20230925153647661

1 e 3 1e^3 1e3,也就是采用o( n 2 n^2 n2)的时间复杂度都可以通过.观察题目来看,我们直接暴力模拟两层循环即可.

注意,这里的数据大小范围为 1 e 9 1e^9 1e9,而int的范围大概为 2 e 9 2e^9 2e9左右.如果使用int来存储最终数据,很容易造成溢出,所以我们使用long long来存储

🍉 题解:

观察题目要求会发现,如果顺序遍历这个数组,很容易出现在出现一个极小的数字,从而影响了前面整个塔的建设.

也就是后续的高度会影响前面已经确定的结果,如果顺序遍历问题一下复杂起来了.所以我们选择从塔尖开始向前遍历.也就是逆序遍历.

d42bb99836b3da141b6f4d874d54a96

整体思路如下:

设定一个值来存储已遍历区间的最小值(我们可以将这个最小值初始化为此时塔尖的高度:因为这半个区间中的所有高度都要小于等于塔尖)

若当前值小于等于这个最小值,则可以加入到答案中(因为我们是逆序遍历,此时说明他是非递增)

若当前值大于这个值,则将最小值加入到答案中.(maxHeights[cur]>=min,就会出现上图的情况)

左右两边进行一个对称的操作,之后将和加入到答案数组即可.(ans[i]表示以i位为塔尖此时的高度和)

最后对数组排序取出最后一个值,即为最大值.

0adfabbbf61439216dde06b26fbde17

class Solution {
public:
    long long maximumSumOfHeights(vector<int>& maxHeights) {
        //存储最大高度和
        vector<long long>ans;
        int n = maxHeights.size();
        for (int i = 0; i < n; i++)
        {
            long long sum = maxHeights[i];
            int min_heightl = maxHeights[i];
            int min_heightr = maxHeights[i];
            for (int j = i-1; j >=0; j--)
            {
                min_heightl = min(min_heightl, maxHeights[j]);
                sum += min_heightl;
            }
            for (int j = i + 1; j < n; j++)
            {
                min_heightr = min(min_heightr, maxHeights[j]);
                sum += min_heightr;
            }
            ans.push_back(sum);
        }
        sort(ans.begin(), ans.end());
        return ans[n - 1];
    }
};

3. 2866. 美丽塔 II

🍉题目

image-20230925150702686

🍉示例:

image-20230925150842337

🍉题意:

这题和美丽塔I的题目完全一样,唯一的区别就是

image-20230926195712817

数据范围从 1 0 3 10^3 103,变成了 1 0 5 10^5 105这意味着不能使用O( n 2 n^2 n2)的算法了.我们需要真正的解决这道题.

🍉 题解:

这里我们可以用前后缀差分的方法,和我们之前美丽塔I的思想类似,也是从分别算出塔的两边再相加.但不同的是:我们仅遍历数组一遍来算出以当前位置为塔尖的(左边或者右边)的和

具体的我们利用单调栈来解决这道题:

以下以右边为例:

假设有数组[1,3,9,5,4,7]

我们第一个遇到的数字是7,此时把他加入到和中.

下一个遇到的数数字是4.因为是递减的排列,所以我们从右向左看.他很明显会被7给遮住.

10bc0b648e121663d1420ce6bf7e093

所以我们将7踢出栈撤销之前更新的答案(也就是减去这个7),再将4入栈.并更新答案.

此时最关键的是,7是被压缩到4同样的高度,而不是被删掉了,也就是此时栈中有两个4.

那我们如何去记录这个栈中有x个y呢?

我们可以在栈中不存数字,存对应数字的数组下标.我们将栈中初始化一个数组大小n,此时只需要用前一个栈中下标减去要入栈的下标,就知道答案需要更新x个y了

0031dd4fa1673d77fce7a910c3498a7

右边栈初始值是n,左边栈初始值是-1.

注意用来存储当前和的数组需要用longlong 否则会爆

class Solution {
public:
    long long maximumSumOfHeights(vector<int>& maxHeights) {
        long long sum=0;
        int n=maxHeights.size();
        stack<int>right;
        right.push(n);
        vector<long long>rsum(n+1);
        rsum.reserve(n+1);
        //存储答案数组会爆int
        vector<long long>lsum(n+1);
        lsum.reserve(n+1);
        //差分后缀
        for (int i = n - 1; i >= 0; i--) {
            while (right.size() > 1 && maxHeights[i] <= maxHeights[right.top()]) {
                int value = right.top();
                right.pop();
                sum -= (long long)(right.top() - value) * maxHeights[value];
            }
            sum += (long long)(right.top() - i) * maxHeights[i];
            right.push(i);
            rsum[i] = sum;
        }
        long long ans=sum;
        stack<int>left;
        sum=0;
        left.push(-1);
        for(int i=0;i<n;i++)
        {
            while(left.size()>1&&maxHeights[i]<=maxHeights[left.top()])
            {   
                int value=left.top();
                left.pop();
                sum-=(long long)(value-left.top())*maxHeights[value];   
            }
            sum+=(long long)(i-left.top())*maxHeights[i];
            ans=max(ans,sum+rsum[i+1]);
            left.push(i);
            lsum[i]=sum;
        }
        return ans;
    }
};

image-20230905164632777

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

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

相关文章

二十六、MySQL并发事务问题:脏读/不可重复读/幻读

1、事务的隔离级别 &#xff08;1&#xff09;隔离级别 Read uncommitted # 读&#xff0c;未提交 Read committed # 读&#xff0c;已提交 Repeatable Read(默认) # 可重复读 Serializable # 串读 &#xff08;2&#xff09;基础语法 set transaction isolation level 事…

高等数学应试考点速览(上)

极限 上界存在&#xff0c;则上确界存在数列极限 定义性质&#xff1a;唯一、有界&#xff08;保序、夹逼、不等式性质&#xff09;、保号、四则运算判定&#xff1a; 单侧&#xff1a;单调有界双侧&#xff1a;闭区间套增量&#xff1a;柯西审敛 归并和收敛子列聚点有限覆盖原…

想要精通算法和SQL的成长之路 - 最长递增子序列 II(线段树的运用)

想要精通算法和SQL的成长之路 - 最长递增子序列 II&#xff08;线段树的运用&#xff09; 前言一. 最长递增子序列 II1.1 向下递推1.2 向上递推1.3 更新操作1.4 查询操作1.5 完整代码&#xff1a; 前言 想要精通算法和SQL的成长之路 - 系列导航 一. 最长递增子序列 II 原题链接…

idea 通过tomcat 配置 https方式访问

步骤1&#xff1a;管理员模式打开cmd命令进行生成密匙 D:\software\apache-tomcat-8.5.93\bin\tomcat.keystore 是生成密匙存放的路径&#xff0c;修改成自己tomcat的路径即可 keytool -genkeypair -alias "tomcat" -keyalg "RSA" -keystore "D:\s…

Spring Boot 集成 MinIO 实现文件上传、下载和删除

MinIO 是一种开源的对象存储服务&#xff0c;它基于云原生架构构建&#xff0c;并提供了高性能、易于扩展和安全的存储解决方案。 一.安装和配置 MinIO 服务器 为了演示方便&#xff0c;本文采用Windows安装 1.在官方网站下载MinIO 安装文件&#xff0c;地址&#xff1a;ht…

MATLAB中norm函数用法

目录 语法 说明 示例 向量模 向量的 1-范数 两个点之间的欧几里德距离 矩阵的 2-范数 N 维数组的 Frobenius 范数 常规向量范数 norm函数的功能是计算向量范数和矩阵范数。 语法 n norm(v) n norm(v,p) n norm(X) n norm(X,p) n norm(X,"fro") 说明…

Android 面试经历复盘整理~

此次面试一共4面4小时&#xff0c;中间只有几分钟间隔。对持续的面试状态考验还是蛮大的。 关于面试的心态&#xff0c;保持悲观的乐观主义心态比较好。面前做面试准备时保持悲观&#xff0c;尽可能的做足准备。面后积极做复盘&#xff0c;乐观的接受最终结果。 切忌急于下结论…

从裸机开始安装操作系统

目录 一、预置知识 电脑裸机 win10版本 官方镜像 V.S. 正版系统 二、下载微软官方原版系统镜像 三、使用微PE系统维护U盘 四、安装操作系统 五、总结 一、预置知识 电脑裸机 ●只有硬件部分&#xff0c;还未安装任何软件系统的电脑叫做裸机。 ●主板、硬盘、显卡等必…

2005-2018年上市公司高管前三名薪酬比例数据

2005-2018年上市公司高管前三名薪酬比例数据 1、时间&#xff1a;2005-2018年 2、指标&#xff1a;证券代码、year、高管薪酬总额、高管前三名薪酬总额、高管前三名薪酬比例、市场类型、行业代码、交易状态 3、范围&#xff1a;上市公司 4、指标解释&#xff1a; 薪酬是员…

深入理解C语言(1):数据在内存中的存储

文章主题&#xff1a;数据在内存中的存储&#x1f30f;所属专栏&#xff1a;深入理解C语言&#x1f4d4;作者简介&#xff1a;更新有关深入理解C语言知识的博主一枚&#xff0c;记录分享自己对C语言的深入解读。&#x1f606;个人主页&#xff1a;[₽]的个人主页&#x1f3c4;&…

【红队攻防】从零开始的木马免杀到上线

0、环境配置说明 应该全部使用云服务器完整演示比较好&#xff0c;奈何太穷了买不起服务器&#xff0c;只能用本地环境演示。所需环境如下&#xff1a; 系统环境&#xff1a; CentOS 7 &#xff0c;Windows 10 软件环境 Cobalt Strike 4.7 , ShellQMaker&#xff0c; 360杀…

医院电子病历编辑器,EMRE(EMR Editor)源码

电子病历主要面向医院机构医生、护士&#xff0c;提供对住院病人的电子病历书写、保存、修改、打印等功能。本系统基于云端SaaS服务方式&#xff0c;通过浏览器方式访问和使用系统功能&#xff0c;提供电子病历在线制作、管理和使用的一体化电子病历解决方案&#xff0c;为医疗…

C语言 Cortex-A7核 IIC实验

iic.h #ifndef __IIC_H__ #define __IIC_H__ #include "stm32mp1xx_gpio.h" #include "stm32mp1xx_rcc.h" /* 通过程序模拟实现I2C总线的时序和协议* GPIOF ---> AHB4* I2C1_SCL ---> PF14* I2C1_SDA ---> PF15** */#define SET_SDA_OUT do{…

JS的基本组成

JavaScript的实现包括以下3个部分&#xff1a; 模块功能ECMAScript(核心)描述了JS的语法和基本对象。文档对象模型 &#xff08;DOM&#xff09;处理网页内容的方法和接口浏览器对象模型&#xff08;BOM&#xff09;与浏览器交互的方法和接口 javascript 有三部分构成&#…

Observability:软件开发和运营中有效日志管理的力量

作者&#xff1a;Luca Wintergerst, David Hope, Bahubali Shetti 当今的快速软件开发过程需要不断扩展且复杂的基础设施和应用程序组件&#xff0c;并且运营和开发团队的工作不断增长且涉及多个方面。 可观察性有助于管理和分析遥测数据&#xff0c;是确保应用程序和基础设施性…

医疗小程序:智能化时代的就医新选择

如今&#xff0c;随着科技的不断进步&#xff0c;人们对于健康的关注度也越来越高。为了满足广大用户的需求&#xff0c;医院与乔拓云平台携手合作&#xff0c;推出了一款医疗小程序&#xff0c;旨在为用户提供更加便捷的健康服务链。 为了让每位用户都能享受到便捷的服务&…

selenium自动化测试+OCR-获取图片页面小说

随着爬虫技术的发展&#xff0c;反爬虫技术也越来越高。 目前有些网站通过自定义字体库的方式实现反爬&#xff0c;主要表现在页面数据显示正常&#xff0c;但是页面获取到的实际数据是别的字符或者是一个编码。 这种反爬需要解析网站自己的字体库&#xff0c;对加密字符使用字…

图片编辑小程序源码/拼图小程序源码

图片编辑小程序源码&#xff0c;拼图小程序源码。全能、便捷的图片编辑工具。实现了图片裁剪、添加文字、涂鸦、拼长图、拼相框等图片编辑功能&#xff0c;另外还有一个简易的表情包制作功能。 主要有以下几个功能&#xff1a;图片裁剪、添加文字、涂鸦功能、拼长图、拼相框、表…

TCPIP状态转换

一个TCP连接在其生命周期中经过了一系列的状态跃迁。一个TCP连接的状态包括&#xff1a; LISTEN &#xff1a;表示正在等待来自任何远程TCP和端口的连接请求&#xff0c;调用listen后套接字出于监听状态SYN_SENT : 表示在发送了连接请求后&#xff0c;正在等待匹配的连接请求…

代码随想录Day03 | 链表基础1 LeetCode T203 移除链表元素 T707设计链表 T206 反转链表

本题思路和解答主要来源于: 代码随想录 (programmercarl.com) LeetCode T203 移除链表元素 题目链接:203. 移除链表元素 - 力扣&#xff08;LeetCode&#xff09; 首先我们回顾一下单向链表,每个链表有一个指针域和一个数据域,在内存中是呈现不连续排列的,对比之前的数组,链…