leetcode:165. 比较版本号

2023-11-05

题目来源

题目描述

在这里插入图片描述
在这里插入图片描述

题目分析

比较两个版本号大小,版本号由修订号组成,中间使用’.'分隔,越靠近字符串前边,修订号的优先级越大。当v1 > v2时返回 1,当v1 < v2时返回 -1,相等时返回 0。

双指针

在这里插入图片描述
如样例所示,v1= 1.02.3, v2 = 1.02.2,前两个修订号都相等,v1的第三个修订号大于v2的第三个修订号,因此v1 > v2,返回1。下面来讲解双指针的做法。

我们使用两个指针ij分别指向两个字符串的开头,然后向后遍历,当遇到小数点.时停下来,并将每个小数点.分隔开的修订号解析成数字进行比较,越靠近前边,修订后的优先级越大。根据修订号大小关系,返回相应的数值。

具体过程如下:

  • 定义两个指针ij,初始化i = 0j = 0
  • 两个指针分别遍历两个字符串,将每个小数点.分隔开的修订号解析成数字,并进行大小比较
    • 如果 num1 > num2,返回 1;
    • 如果 num1 < num2,返回 -1;
  • i++,j++,两个指针都后移一步,进行下一轮的修订号解析比较。
  • 如果遍历完两个字符串都没有返回相应结果,说明两个字符串相等,返回0。

时间复杂度分析: 两个字符串各遍历一遍,因此时间复杂度为 O(n + m)O(n+m) ,n和m分别是两个字符串的长度。

class Solution {
public:
    int compareVersion(string version1, string version2) {
        int len1 = version1.size(), len2 = version2.size();
        int i = 0, j = 0;
        while (i < len1 || j < len2){
            int num1 = 0, num2 = 0;
            while (i < len1 && version1[i] != '.'){
                num1 = num1 * 10 + (version1[i++] - '0');
            }
            while (j < len2 && version2[j] != '.'){
                num2 = num2 * 10 + (version2[j++] - '0');
            }
            if(num1 > num2){
                return 1;
            }else if(num1 < num2){
                return -1;
            }
            i++;
            j++;
        }
        return 0;
    }
};

在这里插入图片描述

类似题目

题目 思路
leetcode:165. 比较版本号 Compare Version Numbers 双指针
leetcode:278. 第一个错误的版本 First Bad Version 二分
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

leetcode:165. 比较版本号 的相关文章

  • 链表(应用篇)

    1 概述 链表是在程序设计过程中经常使用的数据结构 bcos系统内部的调度和tasklet的实现都是基于链表 所以 对链表的支持是bcos与生俱来的特性 bcos的链表设计参考了Linux内核链表的设计思想 如果用户想使用链表只需要在自己的
  • C++基础六:C++入门知识、黑盒测试(详解)与复杂度

    cin与cout cin与cout是C 中的输入和输出函数 需要添加头文件 include
  • QT常用分层式软件架构

    第一次写博客 只做个分享吧 关于软件架构的常用模型目前找到的最详细的解说基于Qt的软件框架设计 amwha的专栏 CSDN博客 qt软件框架 1 QMainWWindow主界面类 转到线程是在实例化子界面对象时 将对应的数据处理类对象转到新
  • 笔记-TCP/IP IP地址字符串表示最大长度

    笔记 TCP IP IP地址字符串表示最大长度 IPv4 IPv6 IPv4 定义在

随机推荐

  • 经典vue面试题:谈一谈computed计算属性和watch监听属性的区别

    computed计算属性和watch监听的区别 computed属性 首先computed计算属性是用于在HTML模板中表达式更加简洁 易维护 特点 computed具有缓存功能 当与computed变量相关的变量值不发生改变时 一直用的是
  • windows7 64位机上配置MinGW+Codeblocks+ wxWidgets

    在Windows7 64位机子上安装配置MinGW Codeblocks wxWidgets步骤如下 1 下载mingw get inst 20111118 http sourceforge net projects mingw 2 双击m
  • vue预渲染

    vue预渲染 vue是一个单页面应用 spa 只有一个 html 文件 内容只有一个 app根节点 通过加载js脚本来填充页面要渲染的内容 然而这种方式无法被爬虫和百度搜索到 如果想对某些页面进行SEO 搜索引擎优化 优化 可以通过预渲染实
  • Springboot中使用websocket发送信息给指定用户和群发

    websocket是一种长连接协议 相较于传统的http短连接 websocket不仅可以由客户端向服务器发送消息 可以主动向客户端发起信息 经常用于及时聊天 游戏和服务器向客户端推送信息 主要优点 1 节约带宽 不停地轮询服务端数据这种方
  • 合并排序算法(详解)

    合并排序是成功应用分治技术的一个完美例子 对于一个需要排序的数组A 1 n 合并排序把它一分为二 A 1 n 2 和A n 2 1 n 并对每个子数组 进行递归排序 然后把这两个排好序的子数组合并成一个有序数组 void MergeSort
  • 微信美团支付服务器异常怎么回事,无法使用微信支付?美团回应:支付系统出现异常 已全面恢复...

    5 月 24 日消息 今日上午 美团无法微信支付 登上微博热搜 有网友反映 在点外卖的时候发现美团无法使用微信支付 今日午间 12 43 分 美团通过官方微博发布回应 今天早上 10 点 28 分 我们接到了微信支付系统出现异常抖动的通知
  • fatal: unable to access =‘https://github.com/‘: OpenSSL SSL_read: Connection was reset, errno 10054

    命令 git clone https github com binary husky chatgpt academic git 出现问题 采用了 git config global unset http proxy 命令还是不行 把 htt
  • Android自动化测试工具——Monkey

    前言 最近开始研究Android自动化测试方法 整理了一些工具 方法和框架 其中包括android测试框架 CTS Monkey Monkeyrunner benchmark 以及其它test tool等等 一 什么是Monkey Monk
  • python range和xrange

    python range和xrange 如果需要迭代一个数字序列的话 可以使用range 函数 range 函数可以生成等差级数 如例 for i in range 5 print i 这段代码将输出0 1 2 3 4五个数字 range
  • Python中对负数的整除和取余及特值情况

    整数取余负数 技巧 先忽略负号 之后取余 和正常取余不同的是 被取余的数x一个数 不能比取余的数小 可以相等 这意味着任何一个整数取余 1结果都为0 之后用这个数减去取余的数 最后在得到的结果上加上负号 当被取余的负数取正后大于取余的数时
  • lettuce jedis 比较

    Lettuce 和 Jedis 的定位都是Redis的client 所以他们当然可以直接连接redis server Jedis在实现上是直接连接的redis server 如果在多线程环境下是非线程安全的 这个时候只有使用连接池 为每个J
  • PostgreSQL IoT,车联网 - 实时轨迹、行程实践 1

    背景 车联网 IoT场景中 终端为传感器 采集各个指标的数据 同时包括时间 GIS位置信息 速度 油耗 温度 EDU采集指标 在运动过程中 通过GPS准实时上报到服务端 服务端则通常根据设备 比如车辆 时间范围 查询指定设备在某个时间区间的
  • redis 由浅入深 之 进阶(服务器)

    Redis 服务器 Redis 服务器命令主要是用于管理 redis 服务 bgrewriteaof 命令用于异步执行一个 AOF AppendOnly File 文件重写操作 重写会创建一个当前 AOF 文件的体积优化版本 即使 Bgre
  • linux服务器上僵尸进程查看并杀死方法

    今天在熟悉Linux命令的时候 使用top查看服务器负载的时候 发现了zombie 简单理解成僵尸吧 这个参数 这个参数就代表僵尸进程的含义 什么是僵尸进程呢 这里盗用一下官方的解释 一个进程在调用exit命令结束自己的生命的时候 其实它并
  • c语言程序设计彩色输出,C语言编程之《输出带有颜色》

    在前一篇文章我们学习了让计算机开口说话是使用printf 但是我们发现 计算机 说 出的话都是 黑底白字 的 其实计算机可以输出彩色的 我们一起来看看吧 注意此处代码只能在Windows操作系统下编译运行 下面 我们来看看 如何让颜色出现吧
  • Webpack5 的一些知识总结

    大厂技术 高级前端 Node进阶 点击上方 程序员成长指北 关注公众号 回复1 加入高级Node交流群 前言 webpack 5是2020年发布的 webpack 4是2018年发布的 在webpack 4之上也做出了挺多的改变 比如 添加
  • MySQL JDBC URL参数

    参数清单 属性名 定义 要求 默认值 版本 Connection Authentication 连接 鉴定 user 连接的用户 No 全部 password 连接时使用的密码 No 全部 socketFactory 驱动程序用于创建与服务
  • 基于Python 课程设计-学生管理系统(附源码+可执行程序)

    前言 基于Python 课程设计 学生管理系统 附源码 可执行程序 非常完整的一个项目 可以作为课程设计去学习 本系统的完整源码在文章结尾处 大家自行获取即可 开发环境要求 本系统的软件开发及运行环境具体如下 操作系统 Windows 7
  • VSCode配置

    VSCode配置 1 SSH远程连接到ubuntu系统 VSCode下载扩展 Config文件编写 接入SFTP 免密登陆 2 Debug模式下进入标准库文件 第三方包源码 3 VSCode大纲只显示类和函数 不显示变量 1 SSH远程连接
  • leetcode:165. 比较版本号

    题目来源 leetcode 题目描述 题目分析 比较两个版本号大小 版本号由修订号组成 中间使用 分隔 越靠近字符串前边 修订号的优先级越大 当v1 gt v2时返回 1 当v1 lt v2时返回 1 相等时返回 0 双指针 如样例所示 v