LeetCode 1729, 12, 19

目录

  • 1729. 求关注者的数量
    • 题目链接
    • 要求
    • 知识点
    • 思路
    • 代码
  • 12. 整数转罗马数字
    • 题目链接
    • 标签
    • 思路
    • 代码
  • 19. 删除链表的倒数第 N 个结点
    • 题目链接
    • 标签
    • 基础
      • 思路
      • 代码
    • 进阶
      • 思路
      • 代码

1729. 求关注者的数量

题目链接

1729. 求关注者的数量

  • Followers的字段为user_idfollower_id

要求

  • 编写解决方案,对于每一个用户,返回该用户的关注者数量。
  • user_id 的顺序返回结果表。

知识点

  1. count():统计个数的函数。
  2. group by:根据某些字段进行分组。
  3. order by:按照某些字段进行排序。

思路

由于该表的字段是 用户id关注他的用户id,所以 一个人的粉丝数 可以看作 他在这张表中的记录数,从而只需要统计每个人的记录数,然后在按照user_id升序返回即可。

代码

selectuser_id,count(*) followers_count
fromFollowers
group byuser_id
order byuser_id

12. 整数转罗马数字

题目链接

12. 整数转罗马数字

标签

哈希表 数学 字符串

思路

如果将罗马数字看作是 M ( 1000 ) , D ( 500 ) , C ( 100 ) , L ( 50 ) , X ( 10 ) , V ( 5 ) , I ( 1 ) M(1000), D(500), C(100), L(50), X(10), V(5), I(1) M(1000),D(500),C(100),L(50),X(10),V(5),I(1)的组合,那么还有六种特殊情况需要注意,即 C M ( 900 ) , C D ( 400 ) , X C ( 90 ) , X L ( 40 ) , I X ( 9 ) , I V ( 4 ) CM(900), CD(400), XC(90), XL(40), IX(9), IV(4) CM(900),CD(400),XC(90),XL(40),IX(9),IV(4),但 如果将这六种特殊情况也当作组合中的元素,那不就没有特殊情况了

所以将罗马数字看作是 M ( 1000 ) , C M ( 900 ) , D ( 500 ) , C D ( 400 ) , C ( 100 ) , X C ( 90 ) , L ( 50 ) , X L ( 40 ) , X ( 10 ) , I X ( 9 ) , V ( 5 ) , I V ( 4 ) , I ( 1 ) 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) 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) 的组合,这样只需要 从大到小找出合适的值拼接得到最终的罗马数字

说到拼接,在 J a v a Java Java中有 S t r i n g B u i l d e r StringBuilder StringBuilder S t r i n g B u f f e r StringBuffer StringBuffer类,它们都可以使用 a p p e n d ( ) append() append() 方法做字符串的拼接,然后通过 t o S t r i n g ( ) toString() toString() 方法返回拼接的字符串,它们的主要区别如下:

线程安全速度
StringBuilder线程不安全
StringBuffer线程安全

由于本题所写的方法不需要在多线程情况下使用,所以不存在线程安全问题,从而使用 S t r i n g B u i l d e r StringBuilder StringBuilder比较好,但是 如果在生产环境下,就得考虑所写的方法是否存在 多个线程对同一个共享资源进行读和写操作 的情况,如果是,则需要使用线程安全的类 S t r i n g B u f f e r StringBuffer StringBuffer

代码

class Solution {private class Mapper { // 罗马数字与阿拉伯数字的映射String roman; // 罗马数字的符号int num; // 对应的阿拉伯数字public Mapper(String roman, int num) {this.roman = roman;this.num = num;}}private final Mapper[] mappers = {new Mapper("M", 1000),new Mapper("CM", 900),new Mapper("D", 500),new Mapper("CD", 400),new Mapper("C", 100),new Mapper("XC", 90),new Mapper("L", 50),new Mapper("XL", 40),new Mapper("X", 10),new Mapper("IX", 9),new Mapper("V", 5),new Mapper("IV", 4),new Mapper("I", 1)}; // 构建 从大到小的 罗马数字与阿拉伯数字的映射public String intToRoman(int num) {StringBuilder builder = new StringBuilder();for (Mapper mapper : mappers) {while (num >= mapper.num) { // 如果剩余的数比当前数大num -= mapper.num; // 给剩余的数减去当前数builder.append(mapper.roman); // 给结果字符串拼接当前数对应的罗马数字}if (num == 0) { // 如果剩余的数等于0break; // 则退出循环,返回结果}}return builder.toString();}
}

19. 删除链表的倒数第 N 个结点

题目链接

19. 删除链表的倒数第 N 个结点

标签

链表 双指针

基础

思路

要删除倒数第 N N N 个节点,就得找到倒数第 N + 1 N+1 N+1 个节点,然后让它指向它下一个节点指向的节点。

如何找倒数第 N + 1 N+1 N+1 个节点?这是个问题,不过标签中的 双指针 作了提醒:可以使用左指针 l e f t left left和右指针 r i g h t right right,倒数第 N + 1 N+1 N+1 个节点与倒数第 0 0 0 个节点(也就是空节点)的距离刚好是 N N N,所以可以让右指针 r i g h t right right先走 N + 1 N+1 N+1步(此时左右指针的距离也刚好是 N N N),然后再让左右指针同速前进,直到右指针 r i g h t right right为空,这时左指针恰好就指向倒数第 N + 1 N+1 N+1 个节点。

由于可能删除链表的倒数最后一个节点(也就是链表的头节点),所以使用哨兵节点指向链表的头节点,这样可以简化对头节点的判断。

代码

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode sentinel = new ListNode(-1, head); // 哨兵节点,指向链表头部ListNode left = sentinel, right = sentinel;// 先让右指针走 N + 1 步,与左指针保持 N 的距离for (int i = 0; i < n + 1; i++) {right = right.next;}// 循环结束后,right == null,left就是倒数第 N + 1 个节点while (right != null) {left = left.next;right = right.next;}left.next = left.next.next; // 删除倒数第 N 个节点return sentinel.next; // 返回哨兵节点指向的节点}
}

进阶

  • 进阶:你能尝试使用一趟扫描实现吗?

思路

既然只扫描一次链表,就需要从每个节点的扫描中获取“信息”,这个信息就是 当前节点是倒数第几个节点。有了这个信息后,就可以根据它删除倒数第 N N N 个节点了。

这里定义一个概念——倒序:对于一个节点,它的倒序 就是 它是倒数第几个节点。比如说最后一个节点的倒序为1,因为它是倒数第一个节点;倒数第 N N N 个节点的倒序为 N N N

和基础版一样,要删除倒序为 N N N 的节点,还是得先找倒序为 N + 1 N+1 N+1 的节点

代码

class Solution {public ListNode removeNthFromEnd(ListNode head, int n) {ListNode sentinel = new ListNode(-1, head);getNodeRevSeq(sentinel, n);return sentinel.next;}private int getNodeRevSeq(ListNode curr, int n) {if (curr == null) { // 倒数第 0 个节点的倒序是0return 0;}int revSeq = getNodeRevSeq(curr.next, n); // 先查这个节点的下一个节点的倒序if (revSeq == n) { // 如果这个节点的下一个节点的倒序为n,则删除下一个节点curr.next = curr.next.next;}return revSeq + 1; // 再返回这个节点的倒序,这个节点的倒序 = 下一个节点的倒序 + 1}
}

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

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

相关文章

【Python入门与进阶】Python函数的定义与使用

定义函数 def function_name(argument1, argument2, ...):"""文档字符串&#xff08;可选&#xff09;"""# 函数体参数 参数列表中的变量用于在函数内部引用传递的参数。可以用类型注解指定参数的类型&#xff08;可选&#xff09;。 文档字符…

vue2文件下载和合计表格

vue2文件数据不多可以直接下载不需要后端的时候 1.首先&#xff0c;确保你已经安装了 docx 和 file-saver 库 npm install file-saver npm install docx file-saver2.全部代码如下 <template><a-modaltitle"详情"width"80%"v-model"visi…

moocast(usaco2016年12月金组第1题)

目录 题目描述 输入 输出 样例输入 复制 样例输出 复制 提示 代码 题目描述 农民约翰的N只奶牛&#xff08;1≤N≤1000&#xff09;想要组织一个紧急的“moo-cast”系统&#xff0c;用于在他们之间广播重要的信息。牛决定装备对讲机&#xff0c;每个牛一个。 这些对讲机每个都具…

python的a[:2]

数据准备 import numpy as np X np.array([[0,1],[2,3],[4,5],[6,7],[8,9],[10,11],[12,13],[14,15],[16,17],[18,19]]) print(X)形成矩阵 print (“X[: 2]:”, X[: 2]) ### :表示索引 0至1行&#xff1b;

MySQL日常问题-行列互换

问题 行列互换 场景1 行转换列 1、表结构和数据 /*Navicat Premium Data TransferSource Server : 本地Source Server Type : MySQLSource Server Version : 80027Source Host : localhost:3306Source Schema : schoolTarget Server Type :…

windows 环境下使用git命令导出差异化文件及目录

一、找出差异化的版本&#xff08;再此使用idea的show history&#xff09; 找到两个提交记录的id 分别为&#xff1a; 二、使用git bash执行命令&#xff08;主要使用 tar命令压缩文件&#xff09; 输出结果&#xff1a;

“人事助理转产品经理”历险记

​好久没写就业喜报了 去年太忙&#xff0c;年后了&#xff0c;必须给大家把同学们就业的情况梳理一下分享出来。希望对大家有所帮助。 同学档案 原岗位&#xff1a;HR 地点&#xff1a;西安 工作年限&#xff1a;2年 转岗级别&#xff1a;中级产品经理 转岗工资&#xff1…

Linux时间子系统2: clock_gettime的VDSO机制分析

在之前分析clock_gettime的文章中接触到了VDSO&#xff0c;本篇文章是对VDSO的学习总结&#xff0c;借鉴了很多前人的经验。 1. 什么是VDSO vDSO:virtual DSO(Dynamic Shared Object)&#xff0c;虚拟动态共享库&#xff0c;内核向用户态提供了一个虚拟的动态共享库。在 Linux …

Vue.js结合ASP.NET Core构建用户登录与权限验证系统

1. 环境准备2. 创建项目3. Vue配置步骤一: 安装包步骤二: 配置文件步骤三: 页面文件 4. 后台配置 在本教程中&#xff0c;我将利用Visual Studio 2022的强大集成开发环境&#xff0c;结合Vue.js前端框架和ASP.NET Core后端框架&#xff0c;从头开始创建一个具备用户登录与权限验…

恭喜!X医生斩获英国伦敦大学学院访问学者邀请函

伦敦大学学院&#xff08;University College London&#xff0c;简称&#xff1a;UCL&#xff09;&#xff0c;1826年创立于英国伦敦&#xff0c;是一所公立研究型大学。伦敦大学联盟的创校学院、罗素大学集团和欧洲研究型大学联盟创始成员&#xff0c;也是金三角名校和G5之一…

电商开发者必读:微店商品详情API接口全解析

微店作为一个流行的电商平台&#xff0c;提供了丰富的API接口供开发者使用。详细介绍商品详情API接口的使用方法&#xff0c;帮助开发者快速获取商品信息&#xff0c;实现商品信息的自动化展示和管理。 1. 接口简介 微店商品详情API接口允许开发者通过商品ID获取商品的详细信…

银行业信息技术外包(ITO)深度解析:现状、挑战、业务分类与协同策略

一、引言 最近有朋友在咨询关于银行业信息技术外包&#xff08;ITO&#xff09;这块业务&#xff0c;同时也在网上看到了关于银行业信息技术外包&#xff08;ITO&#xff09;的相关信息&#xff0c;今天正好有时间&#xff0c;通过采集的相关信息结合自己的相关工作接触到的相关…

云原生应用开发培训,开启云计算时代的新征程

在云计算时代&#xff0c;云原生应用开发技术已经成为IT领域的热门话题。如果您想要转型至云原生领域&#xff0c;我们的云原生应用开发培训将帮助您开启新征程。 我们的课程内容涵盖了云原生技术的基础概念、容器技术、微服务架构、持续集成与持续发布&#xff08;CI/CD&#…

Android低代码开发 - InputMenuPanelItem详解

我们知道MenuPanel是一个菜单面板容器&#xff0c;它里面可以放各式各样的菜单和菜单组。今天我们就来详细讲解输入菜单这个东西。 InputMenuPanelItem源码 package dora.widget.panel.menuimport android.content.Context import android.text.Editable import android.text…

怎么写自动注册苹果ID的工具,会用到哪些源代码?

在数字化时代&#xff0c;苹果ID成为了连接苹果生态系统中各项服务的关键桥梁&#xff0c;然而&#xff0c;手动注册苹果ID的过程往往繁琐且耗时&#xff0c;因此&#xff0c;开发一款能够自动注册苹果ID的工具成为了许多开发者的追求。 本文将科普如何编写这样的工具&#xf…

PFC旁路二极管、继电器驱动电路以及PFC主功率

R001和R002以及R003三个电阻作用是限放X电容上的电 整流桥串联两个BJ1和BJ2 电容C3:给整流桥储能&#xff0c;给后续llc供电 PFC工作是正弦波上叠加高频电流 PFC功率部分 2个PFC电感&#xff08;选择两个磁芯骨架小&#xff0c;有利于散热&#xff09;、2个续流二极管&…

在亚马逊云上部署WordPress:一个完整的LAMP环境安装教程

什么是LAMP LAMP是一个流行的开源软件堆栈&#xff0c;用于网站和网络应用程序的开发和部署。LAMP是几个主要组件的首字母缩写&#xff0c;包括&#xff1a; Linux&#xff1a;操作系统层&#xff0c;LAMP通常部署在Linux操作系统上&#xff0c;但它也可以使用其他类似Unix的…

获取闲鱼商品详情api

要使用闲鱼商品详情API&#xff0c;你需要先申请一个开发者账号&#xff0c;并且在开发者中心创建一个应用&#xff0c;目前很难申请到&#xff0c;还有一个方式是获取第三方应用的AppKey和AppSecret直接使用。 API的请求地址为&#xff1a; https://api.m.taobao.com/h5/mto…

Web 前端三大主流框架

Web 前端开发中&#xff0c;三大主流框架分别是 React、Vue.js 和 Angular。这些框架各有优缺点&#xff0c;并且适用于不同的项目需求。以下是对这三大框架的详细介绍&#xff1a; 1. React 概述 React 是由 Facebook 开发和维护的开源 JavaScript 库&#xff0c;用于构建用…

t265 jetpack 6 px4 ros2

Ubuntu22.04 realsenseSDK2和ROS2Wrapper安装方法,包含T265版本踩坑问题_ros2 realsense-CSDN博客 210 git clone https://github.com/IntelRealSense/librealsense.git 212 git branch 215 git tag 218 git checkout v2.51.1 219 git branch 265 git clone https://…