Leetcode——比较版本号

2023-11-01

1. 比较版本号

在这里插入图片描述

(1)字符串模拟

  • 对字符串进行分割,诸位比较「修订号」大小即可。
  • 对于缺省的修订号位置,使用 00 进行代指。

时间复杂度:令 v1 长度为 n,v2 长度为 m。整体复杂度为O(max(n,m))
空间复杂度:O(n + m)O(n+m)

class Solution {
    //对字符串进行分割,诸位比较「修订号」大小即可。
    //对于缺省的修订号位置,使用 00 进行代指。
    public int compareVersion(String v1, String v2) {
        String[] ss1 = v1.split("\\."), ss2 = v2.split("\\.");
        int n = ss1.length, m = ss2.length;
        int i = 0, j = 0;
        while (i < n || j < m) {
            int a = 0, b = 0;
            if (i < n) 
                a = Integer.parseInt(ss1[i++]);

            if (j < m)
                b = Integer.parseInt(ss2[j++]);

            if (a != b) 
                return a > b ? 1 : -1;
        }
        return 0;
    }

}

(2)双指针

其实,我们也可以自己分割。

同时,我们可以边分割边比较,并不一定需要完全分割完,可能大版本号不同,就可以提前返回了。

时间复杂度:O(max(m,n)),或者 O(m+n),同方法一。
空间复杂度:O(1),除了常数个变量不占用额外的空间。

class Solution {
    public int compareVersion(String version1, String version2) {
        // 初始时两个指针都在开头
        int i = 0, j = 0;
        
        // 任意一个没到头就继续
        while (i < version1.length() || j < version2.length()) {
            int v1 = 0, v2 = 0;
            // 找到 version1 这一截的版本号
            if (i < version1.length()) {
                int start = i;
                // 注意边界
                while (i < version1.length() && version1.charAt(i) != '.') {
                    i++;
                }
                v1 = Integer.parseInt(version1.substring(start, i));
            }

            // 找到 version2 这一截的版本号
            if (j < version2.length()) {
                int start = j;
                while (j < version2.length() && version2.charAt(j) != '.') {
                    j++;
                }
                v2 = Integer.parseInt(version2.substring(start, j));
            }

            if (v1 != v2) {
                return v1 > v2 ? 1 : -1;
            }

            // 同时移动到 . 的下一位
            i++;
            j++;
        }

        return 0;
    }
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Leetcode——比较版本号 的相关文章

  • 使用yum方式安装nginx,yum方式nginx启动

    yum命令安装nginx 前段时间写了一篇使用安装包编译安装nginx的文章 流程比较多 相对比较复杂一点 因为使用安装包编译安装需要自己安装好nginx需要的环境 今天分享一下使用yum的方式安装 这个要简单很多 1 首先安装yum ut
  • 代码管理_阿里如何管理代码分支

    文章转载自 https mp weixin qq com s 0N3isbSZL4fM5HjZo1aafA 背景 在阿里内部 流行着许多有意思的工程实践 有些实践通过工具和流程嵌在集团的大环境里 外界不容易复制 有些实践则是流露在大家的日常

随机推荐

  • C++移动构造函数

    一 背景 拷贝构造函数又分为浅拷贝和深拷贝 但是存在如下问题 浅拷贝 当类中有指针时 直接复制 会使多个指针指向同一块内存 导致重复析构 深拷贝 每次都是重新赋值一份 这种方法内存消耗较大 因此C 就提供了移动构造函数 当需要动态分配内存或
  • linux上的arm虚拟机,ARM Linux教程之一:安装VirtualBox虚拟机

    虚拟机 Virtual Machine 指通过软件模拟的具有完整硬件系统功能的 运行在一个完全隔离环境中的完整计算机系统 通过虚拟机软件 你可以在一台物理计算机上模拟出另一台或多台虚拟的计算机 这些虚拟机完全就像真正的计算机那样进行工作 例
  • 网易笔试:给出n个物品,每个物品都有自己的价值,每个物品只有一件,这些物品需要分给两个人,要求分配完之后,两个人的物品价值相同。分配完成之后,丢弃剩下的物品,求最少要丢弃多少物品。

    题目描述 给出n个物品 每个物品都有自己的价值 每个物品只有一件 这些物品需要分给两个人 要求分配完之后 两个人的物品价值相同 分配完成之后 会丢弃剩下的物品 求最少要丢弃多少物品 输入 输入第一行为总的测试数据个数 第二行为物品个数n 第
  • mysql 表名 字段名_MySQL 查询所有数据库名和表名及字段名

    MySQL中查询所有数据库名和表名 1 查询所有数据库 show databases 2 查询指定数据库中所有表名 select table name from information schema tables where table s
  • 如何使用Windows学习Linux?

    作为一个开发人员 和服务器打交道是必不可少的 好多开发人员使用的是Windows 要学习Linux就得需要一台linux服务器 简单点使用VMware 或者掏钱各大云厂商购买一台服务器 但是作为初学者 只要你有一台Windows电脑 就可以
  • Spring框架(一)Spring核心,设计理念,创建,优缺点,使用场景···

    目录 一 什么是Spring 二 Spring的优缺点 三 Spring的设计理念和核心 目标 四 什么场景使用Spring 五 创建并使用Spring 六 Spring由哪些模块组成 七 Spring框架使用了哪些设计模式 源码 八 sp
  • Moonbeam开发课程的下一步:Moonbuilder闪亮登场

    本文有所删减 全文链接 Moonbeam开发课程的下一步 Moonbuilder闪亮登场 2021年12月3日 由Moonbeam中文团队与波卡技术社区OneBlock 联合主办的第一期 Moonbeam开发者入门课程 结业典礼以线上直播的
  • 搭建高可用 RocketMQ 集群

    RocketMQ发展历史 RocketMQ是一个由阿里巴巴开源的消息中间件 2012年开源 2017年成为apache顶级项目 RocketMQ在阿里内部应用是非常广泛的 阿里内部的几千个应用都运行在RocketMQ之上 双十一期间需要处理
  • @Resource和@Autowired注解的区别

    介绍 Resource和 Autowired都是做bean的注入时使用 但其实 Resource并不是Spring的注解 它的包是javax annotation Resource 需要导入 但是Spring支持该注解的注入 Spring不
  • 硬件设计31之LVDS与TMDS信号

    1 LVDS基础 原理 图文讲解 LVDS是一种低摆幅的差分信号技术 它使得信号能在差分PCB 线对或平衡电缆上以几百Mbps的速率传输 其低压幅和低电流驱动输出实现了低噪声和低功耗 IEEE 在两个标准中对LVDS 信号进行了定义 ANS
  • 音视频 SDL简介

    一 SDL简介 SDL Simple DirectMedia Layer 是一套开放源代码的跨平台多媒体开发库 使用C语言写成 SDL提供了数种控制图像 声音 输出入的函数 让开发者只要用相同或是相似的代码就可以开发出跨多个平台 Linux
  • 911接线员(C++制作)

    哈喽 鸽了许久的酱某终于回来啦 又来整新活了 在中国 紧急拨号一般分成 110 120 119 但在美国 他们的救援电话是一体的 那就是 911 一款名叫 911接线员 的游戏便应运而生了 但这并不是酱某我的游戏 今天我们就要复刻一下这款策
  • 字符串模式匹配

    字符串模式匹配 1 BF算法 初始时让目标T的第 0 位与模式P的第 0 位对齐 顺序比对目标T与模式P中的对应字符 若 P 与 T 比对发现对应位不匹配 则本趟失配 将 P 右移一位与 T 对齐 进行下一趟比对 若 P 与 T 对应位都相
  • STM8硬件IIC从机

    一 平台 芯片 STM8S103F3P6 环境 IAR STVP 系统 WIN7 二 目的 STM8S103F3P6 使用STM8标准库开发 角色 从机 方式 硬件IIC STM32H7 角色 主机 方式 IO口模拟IIC主机 主机发送命令
  • spark安装部署

    spark安装部署 需要指导私信 所有节点安装scala 安装scala需要安装openjdk 8 jre 当前用户如果没有sudo权限可将其加入sudo组里 以ubuntu2204 LTS为例 sudo apt update sudo a
  • 2023护网日记,护网工作内容、护网事件、告警流量分析

    2023护网日记 一 监控设备 二 工作内容 三 安全事件 1 失陷主机排查 2 后门网站修复 四 告警流量分析 1 信息泄露 2 SQL注入 3 文件上传 4 XSS 跨站脚本 5 代码执行 今年 HW 行动正式开启人员招募 总的来说 人
  • JMETER接口测试,参数关联,断言,定时器,前置处理器,后置处理器,cookie

    jmeter如何测试接口 jmeter可以做性能测试 当然同样可以用来做接口的自动测试 打开jmeter图形界面 右键添加一个线程组 取名 API接口测试 添加一个事务控制器 可以简单的先理解为一个接口组 例如 文件接口 用户接口 登录接口
  • LED+串口通信小试牛刀

    目录 一 搭建STM32的开发环境 1 安装STM32CubeMX 2 安装MDK5 二 闪烁原理 三 STM32CUBEMX生成代码 四 keil仿真调试并生成hex文件 五 运行结果 六 STM32通过串口通信 汇编 1 USART介绍
  • C#关于 SQL Server 数据库的操作

    C 创建SQL Server数据库 设置SQL Server数据库为只读状态 修改和压缩SQL Server数据库 新建 删除和修改 数据表 修改 新增和删除 数据列 代码 using System using System Collect
  • Leetcode——比较版本号

    1 比较版本号 1 字符串模拟 对字符串进行分割 诸位比较 修订号 大小即可 对于缺省的修订号位置 使用 00 进行代指 时间复杂度 令 v1 长度为 n v2 长度为 m 整体复杂度为O max n m 空间复杂度 O n m O n m