LeetCode 596, 13, 2

目录

  • 596. 超过5名学生的课
    • 题目链接
    • 要求
    • 知识点
    • 思路
    • 代码
  • 13. 罗马数字转整数
    • 题目链接
    • 标签
    • 罗马数字与阿拉伯数字
      • 映射
      • 规则
    • 思路
    • 代码
  • 2. 两数相加
    • 题目链接
    • 标签
    • 思路
    • 代码
      • 使用被赋值为结果链表头部的指针
      • 哨兵节点指向结果链表头部

596. 超过5名学生的课

题目链接

596. 超过5名学生的课

  • Courses的字段为studentclass

要求

  • 查询 至少有5个学生 的所有班级。
  • 任意顺序 返回结果表。

知识点

  1. count():统计个数的函数。
  2. group by:按照某些字段进行分组。
  3. 子查询:将查询的结果作为表进行查询。

思路

对班级的要求为至少有5个学生,那么就先查询每个班级的学生数,然后再返回学生数大于等于5的班级。

代码

selectclass
from(selectcount(*) num,classfromCoursesgroup byclass) c
wherenum >= 5

13. 罗马数字转整数

题目链接

13. 罗马数字转整数

标签

哈希表 数学 字符串

罗马数字与阿拉伯数字

映射

罗马数字阿拉伯数字
I1
V5
X10
L50
C100
D500
M1000

规则

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

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

思路

可以这样理解罗马数字:当小的数字放在左边时,表示给大的数减去这个小的数(即 I V IV IV表示4);当小的数字放在右边,或两个数一样大时,表示加上这个小的数(即 V I VI VI表示6, I I I III III表示3)。

例如,对于 M C M X C I V MCMXCIV MCMXCIV,从第一位开始看,第一位是 M ( 1000 ) M(1000) M(1000) M ( 1000 ) M(1000) M(1000) C ( 100 ) C(100) C(100)大,所以给结果res加上1000。看第二位 C ( 100 ) C(100) C(100) C ( 100 ) C(100) C(100) M ( 1000 ) M(1000) M(1000)小,所以给结果res减去100。看第三位 M ( 1000 ) M(1000) M(1000) M ( 1000 ) M(1000) M(1000) X ( 10 ) X(10) X(10)大,所以给结果res加上1000。看第四位 X ( 10 ) X(10) X(10) X ( 10 ) X(10) X(10) C ( 100 ) C(100) C(100)小,所以给结果res减去10。看第五位 C ( 100 ) C(100) C(100) C ( 100 ) C(100) C(100) I ( 1 ) I(1) I(1)大,所以给结果res加上100。看第六位 I ( 1 ) I(1) I(1) I ( 1 ) I(1) I(1) V ( 5 ) V(5) V(5)小,所以给结果res减去1。看第七位 V ( 5 ) V(5) V(5),由于它是最后一位,所以直接给结果res加上5。

代码

class Solution {private static final Map<Character, Integer> mapper = new HashMap<>(); // 罗马数字对阿拉伯数字的映射static { // 使用静态代码块初始化映射数组mapper.put('I', 1);mapper.put('V', 5);mapper.put('X', 10);mapper.put('L', 50);mapper.put('C', 100);mapper.put('D', 500);mapper.put('M', 1000);}public int romanToInt(String s) {int res = 0;char[] roman = s.toCharArray();int n = roman.length;for (int i = 0; i < n; i++) {int value = mapper.get(roman[i]);if (i < n - 1 && value < mapper.get(roman[i + 1])) { // 左边的数字小res -= value;} else { // 左边的数字不小 或 是最后一个数字res += value;}}return res;}
}

2. 两数相加

题目链接

2. 两数相加

标签

递归 链表 数学

思路

熟悉 加法 是解决本题的关键,也是解决 高精度 问题的关键。

加法:

  • 从最低位(也就是个位)开始计算,如果两数之和大于等于10,则将大于10的部分(即对10取余)留在当前位,并且给更高位加1;否则就将两数之和留在当前位。
  • 如果有一个数的某一位没有值,则给它这位补0。直到两个数都在某一位上没有值。例如100 + 1可以理解为100 + 001。
  • 两个数加起来的位数可能比较大值的位数还大,所以遍历完两个数后应该再看一下它们最高位的和是否大于10,如果大于10,则再添一位,这位的数字是1(因为0~9之间的两个数之和如果大于10,则一定是10~18之间的数)。例如90 + 20 = 110,其中90是二位数,而110是三位数。

本题还是使用了 哨兵节点指向结果链表头部 的处理方式,没有直接使用一个指针head被赋值为结果链表头部,这样可以省去对head是否为空的判断。

代码

使用被赋值为结果链表头部的指针

class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode head = null, curr = null;boolean biggerThan10 = false;while (l1 != null || l2 != null) { // 直到两个链表都为空int v1 = (l1 == null ? 0 : l1.val); // 如果这一位没有值,就补0int v2 = (l2 == null ? 0 : l2.val); // 如果这一位没有值,就补0int sum = v1 + v2 + (biggerThan10 ? 1 : 0); // 这位的求和与上一位有关,如果上一位的和比10大,得再加1biggerThan10 = (sum >= 10);// 更新当前节点if (head == null) {head = curr = new ListNode(sum % 10); // 这位留下来的值必定比10小} else {curr.next = new ListNode(sum % 10); // 这位留下来的值必定比10小curr = curr.next;}if (l1 != null) {l1 = l1.next; // 如果l1不是空,则更新它}if (l2 != null) {l2 = l2.next; // 如果l2不是空,则更新它}}// 如果最高位的和大于10,则再添一位if (biggerThan10) {curr.next = new ListNode(1);}return head;}
}

哨兵节点指向结果链表头部

class Solution {public ListNode addTwoNumbers(ListNode l1, ListNode l2) {ListNode sentinal = new ListNode(-1); // 哨兵节点指向结果,返回哨兵节点的nextListNode curr = sentinal;boolean biggerThan10 = false;while (l1 != null || l2 != null) { // 直到两个链表都为空int v1 = (l1 == null ? 0 : l1.val); // 如果这一位没有值,就补0int v2 = (l2 == null ? 0 : l2.val); // 如果这一位没有值,就补0int sum = v1 + v2 + (biggerThan10 ? 1 : 0); // 这位的求和与上一位有关,如果上一位的和比10大,得再加1biggerThan10 = (sum >= 10); // 判断这位的和是否大于10curr.next = new ListNode(sum % 10); // 这位留下来的值必定比10小curr = curr.next; // 更新当前节点if (l1 != null) {l1 = l1.next; // 如果l1不是空,则更新它}if (l2 != null) {l2 = l2.next; // 如果l2不是空,则更新它}}// 如果最高位的和大于10,则再添一位if (biggerThan10) {curr.next = new ListNode(1);}return sentinal.next;}
}

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

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

相关文章

【复旦邱锡鹏教授《神经网络与深度学习公开课》笔记】线性分类模型损失函数对比

本节均以二分类问题为例进行展开&#xff0c;统一定义类别标签 y ∈ { 1 , − 1 } y\in\{1,-1\} y∈{1,−1}&#xff0c;则分类正确时 y f ( x ; w ) > 0 yf(x;w)>0 yf(x;w)>0&#xff0c;且值越大越正确&#xff1b;错误时 y f ( x ; w ) < 0 yf(x;w)<0 yf(x;…

ubtun虚拟机安装

选择镜像后启动 选择第一个回车 加载完成后 &#xff0c;进入Ubuntu安装界面&#xff0c;安装语言选择English&#xff0c;完成后按一下回车&#xff1a; 此时弹出安装器可更新提示&#xff0c;下方选项选择第二个Continue without updating&#xff08;不更新&#xff0c;继续…

升级和维护老旧LabVIEW程序

在升级老旧LabVIEW程序至64位环境时&#xff0c;需要解决兼容性、性能和稳定性等问题。本文从软件升级、硬件兼容性、程序优化、故障修复等多个角度详细分析。具体包括64位迁移注意事项、修复页面跳转崩溃、解决关闭程序后残留进程的问题&#xff0c;确保程序在新环境中的平稳运…

k8s中的pod域名解析失败定位案例

问题描述 我在k8s中启动了一个Host网络模式的pod&#xff0c;这个pod的域名解析失败了。 定位步骤 敲kubectl exec -it [pod_name] -- bash进入pod后台&#xff0c;查看/etc/resolv.conf&#xff0c;发现nameserver配的有问题。这里我预期的nameserver应该使用宿主机的&…

亚马逊跟卖选品不再迷茫,适合跟卖卖家得一款选品软件工具!

对于刚开始做跟卖的卖家而言&#xff0c;刚开始最头疼的应该就是选品了吧&#xff0c;不知道跟卖什么产品&#xff0c;不是知道怎么有效的选择跟卖产品&#xff0c;所以很多卖家都会借助&#xff0c;选品软件来进行选品&#xff0c;这样不仅能提高选品的效率&#xff0c;还能帮…

对于机器学习的回答

一、什么是机器学习 机器学习&#xff08;Machine Learning&#xff09;是人工智能&#xff08;AI&#xff09;的一个子领域&#xff0c;它使计算机系统能够从数据中自动学习和改进&#xff0c;而无需明确编程。机器学习利用统计学和计算技术&#xff0c;构建能够识别数据中的模…

人工智能的社会应用:深刻变革的新浪潮

人工智能的社会应用&#xff08;语言文本方面&#xff09; 人工智能在社会应用中的广泛运用体现在多个领域&#xff0c;特别是在语音和文本处理方面。以下是这些技术的一些扩展&#xff1a; 1. 文本翻译&#xff1a; 谷歌翻译&#xff1a;利用深度学习模型&#xff0c;支持100多…

pom学习笔记:kimi的自动化操作

1.先看结构&#xff1a; 声明&#xff1a;我是初学&#xff0c;可能有不合理的地方。 2.Base层。 我是把原来一个kimi的自动问答的代码改过来。 分析&#xff1a;其实我是新手&#xff0c;因为我用的浏览器是固定的&#xff0c;也没有打算和别人用。所以浏览器层面年的全部写…

App UI 风格展现非凡创意

App UI 风格展现非凡创意

rust-强化练习

钓鱼不打窝&#xff0c;钓的也不多 语言只靠看不行&#xff0c;还得练&#xff0c;下面是AI生成的一些题目&#xff0c;后续直接肝LeeCode,一举2得 1、猜数字 描述&#xff1a;创建一个简单的猜数字游戏&#xff0c;程序会随机生成一个数字&#xff0c;玩家需要猜出这个数字是…

实验题目*:太阳风暴

本人承担实验内容&#xff08;以条目形式列出&#xff09;*&#xff1a; 输入处理和初始化 任务描述&#xff1a;负责处理输入数据并初始化相关变量和数组 参与本实验自我评价&#xff08;包括自己完成状况、在实验中的工作等&#xff09;*&#xff1a; 完成状况&#xff1a…

首件检验为什么这么重要?

首件检验是制造业生产过程中的一个重要环节&#xff0c;通常是在每个班次刚开始时或生产过程中的条件发生改变后&#xff08;如人员变动、材料更换、设备调整等&#xff09;&#xff0c;对加工的第一或前几件产品进行的专门检验。尤其在汽车零部件生产企业、电子制造企业广泛采…

将/root/anaconda3/bin目录添加到环境变量里面【Linux安装anaconda环境无法使用conda命令解决方法】

将 /root/anaconda3/bin 目录添加到环境变量里&#xff0c;需要编辑 ~/.bashrc 文件或 ~/.bash_profile 文件&#xff0c;并添加相应的 PATH 设置。以下是具体步骤&#xff1a; 编辑 ~/.bashrc 文件 使用文本编辑器打开 ~/.bashrc 文件&#xff1a; nano ~/.bashrc添加 Anaco…

算法训练营day58

题目1&#xff1a;392. 判断子序列 - 力扣&#xff08;LeetCode&#xff09; 暴力解法 class Solution { public:bool isSubsequence(string s, string t) {if(s.size() > t.size()) return false;if(s.size() < t.size()) {swap(s, t);}bool reslut false;int flag …

深入探索MySQL:性能调优与架构设计

大家好&#xff0c;今天我要和大家分享一本非常实用的技术书籍——《MySQL性能调优与架构设计》。无论你是数据库管理员、开发人员&#xff0c;还是对数据库优化感兴趣的技术爱好者&#xff0c;这本书都将为你打开MySQL性能优化的大门。 MySQL的世界 MySQL&#xff0c;作为最流…

光纤跳线(又称光纤连接器)的种类

光纤跳线&#xff08;又称光纤连接器&#xff09;&#xff0c;也就是接入光模块的光纤接头&#xff0c;也有好多种&#xff0c;且相互之间不可以互用。SFP模块接LC光纤连接器&#xff0c;而GBIC接的是SC光纤连接器。下面对网络工程中几种常用的光纤连接器进行详细的说明&#x…

arm64架构 统信UOS搭建PXE无盘启动Linux系统(麒麟桌面为例)

arm64架构 统信UOS搭建PXE无盘启动Linux系统&#xff08;麒麟桌面为例&#xff09; 搞了好久搞得头疼哎 1、准备服务器UOS服务器 准备服务IP 这里是192.168.1.100 1.1、安装程序 yum install -y dhcp tftp tftp-server xinetd nfs-utils rpcbind 2、修改配置 2.1、修改dhcpd.c…

直播带货连创新高!TikTok美区下半年将迎来集中爆发!

美区直播带短短两周时间&#xff0c;TikTok货迎来大爆发&#xff01; 5月31日&#xff0c;美国顶流美妆网红“Jeffree Star”&#xff0c;带货直播单场GMV创记录&#xff0c;销售额达到66.5万美元&#xff08;约482.4万人民币&#xff09;。紧接着&#xff0c;6月8日&#xff0…

docker拉取镜像失败超时的解决方法,docker配置国内镜像源

更换国内源 创建或修改 /etc/docker/daemon.json 文件 安装docker后一般只有 /etc/docker 这个目录 下面并没有 daemon.json 文件 我们直接创建 &#xff1a; vim /etc/docker/daemon.json {"registry-mirrors" : ["https://registry.docker-cn.com"…

AI 绘画工具详解:从基础原理到实践应用

AI 绘画工具详解:从基础原理到实践应用 引言 在当今数字化时代,人工智能(AI)技术已经深入到各行各业,其中,AI绘画工具作为人工智能与艺术创作的结合点,正逐渐成为创意领域的重要力量。从传统的手工绘画到数字绘画,再到现在的AI绘画,技术的发展不断拓展了艺术创作的边…