LeetCode第11~15题解

news2024/11/23 20:44:57

CONTENTS

    • LeetCode 11. 盛最多水的容器(中等)
    • LeetCode 12. 整数转罗马数字(中等)
    • LeetCode 13. 罗马数字转整数(简单)

LeetCode 11. 盛最多水的容器(中等)

【题目描述】

给定一个长度为 n 的整数数组 height。有 n 条垂线,第 i 条线的两个端点是 (i, 0)(i, height[i])
找出其中的两条线,使得它们与 x 轴共同构成的容器可以容纳最多的水。
返回容器可以储存的最大水量。
说明:你不能倾斜容器。

【示例1】

在这里插入图片描述

输入:[1,8,6,2,5,4,8,3,7]
输出:49 
解释:图中垂直线代表输入数组 [1,8,6,2,5,4,8,3,7]。在此情况下,容器能够容纳水(表示为蓝色部分)的最大值为 49。

【示例2】

输入:height = [1,1]
输出:1

【提示】

n = h e i g h t . l e n g t h n = height.length n=height.length
2 ≤ n ≤ 1 0 5 2\le n\le 10^5 2n105
0 ≤ h e i g h t [ i ] ≤ 1 0 4 0\le height[i]\le 10^4 0height[i]104

【分析】


很巧妙的一道贪心思维题,我们先在最左边和最右边设置两个指针,每次将指针指向的数较小的那个指针往中间靠拢一格,且每次都维护一遍最大值即可。因为当一个指针往中间移动时,矩形的宽度缩小了,想要面积变大,那肯定需要指针指向的数值(即矩形高度)变大,而矩形的高度的瓶颈在于较短的那一条边,因此移动较小的指针。


【代码】

class Solution {
public:
    int maxArea(vector<int>& height) {
        int res = 0;
        for (int l = 0, r = height.size() - 1; l < r; )
        {
            res = max(res, (r - l) * min(height[l], height[r]));
            if (height[l] < height[r]) l++;
            else r--;
        }
        return res;
    }
};

LeetCode 12. 整数转罗马数字(中等)

【题目描述】

罗马数字包含以下七种字符:IVXLCDM

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如,罗马数字 2 写做 II,即为两个并列的 1。12 写做 XII,即为 X + II。27 写做 XXVII,即为 XX + V + II

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V(5)和 X(10)的左边,来表示 4 和 9。
  • X 可以放在 L(50)和 C(100)的左边,来表示 40 和 90。
  • C 可以放在 D(500)和 M(1000)的左边,来表示 400 和 900。

给你一个整数,将其转为罗马数字。

【示例1】

输入: num = 3
输出: "III"

【示例2】

输入: num = 58
输出: "LVIII"
解释: L = 50, V = 5, III = 3.

【示例3】

输入: num = 1994
输出: "MCMXCIV"
解释: M = 1000, CM = 900, XC = 90, IV = 4.

【提示】

1 ≤ n u m ≤ 3999 1\le num\le 3999 1num3999

【分析】


在这里插入图片描述

我们先打个表找规律,把几个特殊的数字打表记下来,然后从高到低枚举,以 2964 为例,先循环判断是否大于1000,若满足则减去1000并在答案中添加 M,整个模拟流程如下:

2964  ""
1964  "M"
964   "MM"
64    "MMCM"
14    "MMCML"
4     "MMCMLX"
0     "MMCMLXIV"

【Python代码】

class Solution:
    def intToRoman(self, num: int) -> str:
        dic = collections.OrderedDict(
            M=1000, CM=900, D=500, CD=400, C=100, XC=90,
            L=50, XL=40, X=10, IX=9, V=5, IV=4, I=1
        )
        res = ''
        for k, v in dic.items():
            while num >= v:
                res += k; num -= v
        return res

LeetCode 13. 罗马数字转整数(简单)

【题目描述】

罗马数字包含以下七种字符:IVXLCDM

字符          数值
I             1
V             5
X             10
L             50
C             100
D             500
M             1000

例如,罗马数字 2 写做 II,即为两个并列的 1。12 写做 XII,即为 X + II。27 写做 XXVII,即为 XX + V + II

通常情况下,罗马数字中小的数字在大的数字的右边。但也存在特例,例如 4 不写做 IIII,而是 IV。数字 1 在数字 5 的左边,所表示的数等于大数 5 减小数 1 得到的数值 4。同样地,数字 9 表示为 IX。这个特殊的规则只适用于以下六种情况:

  • I 可以放在 V(5)和 X(10)的左边,来表示 4 和 9。
  • X 可以放在 L(50)和 C(100)的左边,来表示 40 和 90。
  • C 可以放在 D(500)和 M(1000)的左边,来表示 400 和 900。

给定一个罗马数字,将其转换成整数。

【示例1】

输入: s = "III"
输出: 3

【示例2】

输入: s = "LVIII"
输出: 58
解释: L = 50, V= 5, III = 3.

【示例3】

输入: s = "MCMXCIV"
输出: 1994
解释: M = 1000, CM = 900, XC = 90, IV = 4.

【提示】

1 ≤ s . l e n g t h ≤ 15 1\le s.length\le 15 1s.length15
s 仅含字符 ('I', 'V', 'X', 'L', 'C', 'D', 'M')
题目数据保证 s 是一个有效的罗马数字,且表示整数在范围 [1, 3999]
题目所给测试用例皆符合罗马数字书写规则,不会出现跨位等情况
ILIM 这样的例子并不符合题目要求,49 应该写作 XLIX,999 应该写作 CMXCIX

【分析】


和上一题相似,先对罗马数字进行观察,发现除了4、40、400和9、90、900以外的其他罗马数字直接将每个字母转换成对应的整数相加即可。上面提到的这6个罗马数字他们的前一位数字比后一位数字更小,对其进行特判即可。


【Python代码】

class Solution:
    def romanToInt(self, s: str) -> int:
        dic = dict(M=1000, D=500, C=100, L=50, X=10, V=5, I=1)
        res = 0
        for i in range(len(s)):
            if i + 1 < len(s) and dic[s[i]] < dic[s[i + 1]]:
                res -= dic[s[i]]
            else:
                res += dic[s[i]]
        return res

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

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

相关文章

广州华锐互动:VR垃圾分类虚拟科普系统让学习过程更加丰富有趣

在我们的日常生活中&#xff0c;垃圾分类已成为一项重要的公民责任。然而&#xff0c;由于缺乏对垃圾分类的深入理解和相关知识&#xff0c;许多人在实践中往往感到困惑和挫败。为了解决这个问题&#xff0c;一种创新的解决方案应运而生&#xff1a;垃圾分类VR虚拟仿真教学系统…

ESP32使用Arduino读写SD卡

背景 esp32屏幕包含一个sd卡接口&#xff0c;通过SPI线连接&#xff0c;需要对插入改SD接口中的TF卡进行读写&#xff0c;通过arduino平台实现。 代码中HSPI指ESP32的SPI2; 在Master模式下&#xff0c;SPID是MOSI/data out, SPIQ是MISO/data in&#xff1a; 代码 #include…

【C语言】指针 和 数组 笔试题详解

目录 一、数组 1.一维数组 2.字符数组 3.二维数组 二、指针 笔试题1 笔试题2 笔试题3 笔试题4 笔试题5 笔试题6 笔试题7 笔试题8&#xff08;有难度&#xff09;【看明白会有质的收获】 在这里我们需要先了解数组名的意义 sizeof(数组名) &#xff0c;这里的数组名表示…

7年经验之谈 —— 如何高效的开展app的性能测试

APP性能测试是什么 从网上查了一下&#xff0c;貌似也没什么特别的定义&#xff0c;我这边根据自己的经验给出一个自己的定义&#xff0c;如有巧合纯属雷同。 客户端性能测试就是&#xff0c;从业务和用户的角度出发&#xff0c;设计合理且有效的性能测试场景&#xff0c;制定…

代码随想录Day_48打卡

①、打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被小偷闯入&#xff0c;系统会自动报警。 给定一个代表每个房…

Yolov1原理详细解读及实战(一)理论篇

什么是Yolov1? Yolo(You Only Look Once)是一种one-stage目标检测算法&#xff0c;即仅需要 “看” 一次就可以识别出图片中物体的class类别和位置。作为one-stage的开山鼻祖&#xff0c;YOLOv1以其简洁的网络结构和GPU上的实时检测速度而一鸣惊人&#xff0c;打破了R-CNN的“…

Linux centos7 bash编程(break和continue)

在学习shell知识时&#xff0c;简单编程要从格式入手。 首先学习好单行注释和多行注释。 先学习简单整数的打印输出&#xff0c;主要学习echo命令&#xff0c;学习选项-e -n的使用。 下面的练习是常用的两个分支程序&#xff1a;break和continue。 #!/bin/bash # 这是单行注…

极氪汽车的云资源治理细探

作者&#xff1a;极氪汽车吴超 前言 2021 年&#xff0c;极氪 001 迅速崭露头角&#xff0c;仅用 110 天便创下了首款车型交付量“最快破万”的纪录。2022 年 11 月&#xff0c;极氪 009 在短短 76 天内便率先完成了首批交付&#xff0c;刷新了中国豪华纯电品牌交付速度的纪录…

算法通过村第四关-栈白银笔记|括号问题

文章目录 前言1. 括号匹配问题2. 最小栈问题3. 最大栈 总结 前言 提示&#xff1a;如果让我送给年轻人四个字&#xff0c;就是&#xff1a;量力而行。 量力而行不会失眠&#xff0c;不会啃老&#xff0c;不会为各种考试焦虑。顺其自然活得轻松。其实&#xff0c;量力而行最易大…

数据库集群的简单了解

Update 关于操作的日志 1.0 redo log 读一次写一次 一共2次, 不安全 注意redo log是顺写 而file是随机 所以Mysql做出类似HDFS的操作 行为日志和数据分离&#xff0c;但是不同的是&#xff0c;Mysql在内存中操作修改&#xff0c;如果不出事故&#xff0c;由内存中的行为来直接…

Yolov1原理详细解读及实战(二)实战篇

在Yolov1原理详细解读及实战&#xff08;一&#xff09;理论篇 中&#xff0c;我们对Yolov1网络结构、算法流程、训练及推理原理进行了详细剖析&#xff0c;本章进入实战环节&#xff0c;话不多说&#xff0c;马上开始&#xff01; 环境 vscodeWSL:Ubuntu 18.04python 3.9.7 …

wireshark过滤器的使用

目录 wiresharkwireshark的基本使用wireshark过滤器的区别 抓包案例 wireshark wireshark的基本使用 抓包采用 wireshark&#xff0c;提取特征时&#xff0c;要对 session 进行过滤&#xff0c;找到关键的stream&#xff0c;这里总结了 wireshark 过滤的基本语法&#xff0c;…

外卖订餐系统源码:数字化时代餐饮服务的创新之道

在如今快节奏的生活中&#xff0c;外卖订餐系统源码正成为餐饮业界的一股创新浪潮。它为餐厅和创业者提供了一个数字化的平台&#xff0c;使订餐与配送更加便捷、高效。本文将为您展示如何使用外卖订餐系统源码创建一个简单但功能强大的订餐平台。 # 导入必要的模块 import d…

离线竞价功能说明及设置

为了更加方便广大用户不再熬夜竞价&#xff0c;西部数码推出了离线竞价功能&#xff0c;现已正式上线&#xff0c;欢迎大家使用反馈。 1、离线竟价功能说明 当您拥有域名的出价权限时&#xff0c;您可在 【我参与的竞价】或【我出价的域名】列表选中域名开启离线竟价。 设置…

固定资产管理系统都需要考虑哪些问题?

企业管理中固定资产的追踪和管理是非常重要的一环。固定资产不仅包括房屋、土地、机器设备等大量的资产&#xff0c;也包括低值易耗品。因为这些资产往往是企业生产或者管理过程中不可或缺的。在使用和管理过程中&#xff0c;往往涉及到转移、借调、维护等方面。如何进行有效的…

健康安全的新定义,照明舒适达到巅峰,SUKER书客护眼台灯L1震撼发售

深耕照明领域多年的SUKER书客&#xff0c;这一次给大家带来一份大惊喜。在最近正式发布新品——SUKER书客护眼台灯L1&#xff0c;这款护眼台灯承载着在照明领域的前沿技术&#xff0c;能保证照明安全健康和舒适度并带来非常优秀的护眼效果。作为书客在护眼台灯领域的颠覆式新品…

【FaceChain风格DIY手把手教程】无限场景风格LoRA与固定人物LoRA的融合(4Kstar!)

先看效果 以上风格LoRA分别为&#xff1a;户外花园婚纱、冬季雪景汉服、火焰女神、仙侠风 环境准备 在魔搭平台ModelScope 魔搭社区中选择PAI-DSW-GPU环境 进入后打开terminal环境&#xff0c;先检查显存需要20G左右&#xff08;nvidia-smi&#xff09;&#xff0c;然后下载核…

面试题-React(七):React组件通信

在React开发中&#xff0c;组件通信是一个核心概念&#xff0c;它使得不同组件能够协同工作&#xff0c;实现更复杂的交互和数据传递。常见的组件通信方式&#xff1a;父传子和子传父 一、父传子通信方式 父组件向子组件传递数据是React中最常见的一种通信方式。这种方式适用…

什么是可观测性

可观测性是指使用从其组件收集的累积信息来了解系统或应用程序的当前状态&#xff0c;可观测性通常侧重于监视整个系统或应用程序&#xff0c;而不是单独管理元素&#xff0c;完全可观察的环境将深入了解网络堆栈&#xff0c;并始终保持网络基础设施处于最佳工作状态。 什么是…