重温算法之比较版本号

简介: 当看到这个题目时我第一个想法是循环遍历,但是思路不对,然后去看了题友的解题思路才想有点想法。有时候没有思路也可以参考题友的做法,我们的最终目的是学习而不是跟自己硬磕,理解思路,学会其思路也是一种收获。

微信截图_20220531173728.png

一.题目介绍


1.题目来源


链接:LeetCode


2.题目


给你两个版本号 version1 和 version2 ,请你比较它们。

版本号由一个或多个修订号组成,各修订号由一个 '.' 连接。每个修订号由多位数字组成,可能包含 前导零 。每个版本号至少包含一个字符。修订号从左到右编号,下标从0开始,最左边的修订号下标为0,下一个修订号下标为 1 ,以此类推。例如,2.5.33 和 0.1 都是有效的版本号。


比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较忽略任何前导零后的整数值 。也就是说,修订号1和修订号001相等 。如果版本号没有指定某个下标处的修订号,则该修订号视为0。例如,版本1.0小于版本1.1 ,因为它们下标为0的修订号相同,而下标为1的修订号分别为0和1,0<1 。

微信截图_20220531175812.png

二.具体实现


1.实现思路


这个题目的考察点是考察我们对双指针的运用熟练度,其实在实际的开发过程中,双指针也运用得很多,那么接下来我们看看这道题怎么去做,我们可以先按点号(.)分割,然后进行大小的比较,version1中元素大于version2中的则代表version1与version2下标为0的修订号是相同的,反正之则不同吗,依次比较,则可得出结果。


2.实现代码


1)自己的实现方式

public int compareVersion(String version1, String version2) {
    //先按.分割
    String[] s1 = version1.split("\.");
    String[] s2 = version2.split("\.");
   //取出两者中最长的
    int len = Math.max(s1.length,s2.length);
    int i1 = 0;
    int i2 = 0;
   //按最长遍历,依次比较元素
    for(int i=0;i<len;i++){
        if(s1.length>i && s2.length>i && Integer.valueOf(s1[i])>Integer.valueOf(s2[i])){
            return 1;
        }else if(s1.length>i && s2.length>i && Integer.valueOf(s1[i])<Integer.valueOf(s2[i])){
            return -1;
        }
        if(s1.length>i)
            i1=i1+Integer.valueOf(s1[i]);
        if(s2.length>i)
            i2=i2+Integer.valueOf(s2[i]);
    }
    if(i1>i2)return 1;
    if(i1<i2)return -1;
    return 0;
}
复制代码


2)题友的实现方式


(双指针)  O(n + m)O(n+m) 具体过程如下:


1、定义两个指针 i和j,初始化i = 0,j = 0。


2、两个指针分别遍历两个字符串,将每个小数点'.'分隔开的修订号解析成数字,并进行大小比较:

如果 num1 > num2,返回 1;

如果 num1 < num2,返回 -1;


3、i++,j++,两个指针都后移一步,进行下一轮的修订号解析比较。


4、如果遍历完两个字符串都没有返回相应结果,说明两个字符串相等,返回0。

代码: 微信截图_20220531175914.png


3.运行结果

微信截图_20220531180036.png

微信截图_20220531180002.png


三.题后思考


当看到这个题目时我第一个想法是循环遍历,但是思路不对,然后去看了题友的解题思路才想有点想法。有时候没有思路也可以参考题友的做法,我们的最终目的是学习而不是跟自己硬磕,理解思路,学会其思路也是一种收获。

目录
相关文章
|
6月前
|
安全 小程序 数据安全/隐私保护
aes加密算法python版本
aes加密算法python版本
78 0
|
2月前
|
算法 计算机视觉
Mat未初始化引起拼接算法结果,release版本和debug版本不一致
在OpenCV中由于Mat对象未初始化导致的拼接算法在release版本和debug版本中结果不一致的问题,并提供了通过显式初始化Mat对象为零来解决这一问题的修改方法。
|
3月前
|
算法 关系型数据库 MySQL
揭秘MySQL中的版本号排序:这个超级算法将颠覆你的排序世界!
【8月更文挑战第8天】在软件开发与数据管理中,正确排序版本号对软件更新及数据分析至关重要。因MySQL默认按字符串排序版本号,可能出现&#39;1.20.0&#39;在&#39;1.10.0&#39;之前的不合理情况。解决办法是将版本号各部分转换为整数后排序。例如,使用`SUBSTRING_INDEX`和`CAST`函数从`software`表的`version`字段提取并转换版本号,再按这些整数排序。这种方法可确保版本号按逻辑正确排序,适用于&#39;major.minor.patch&#39;格式的版本号。对于更复杂格式,需调整处理逻辑。掌握此技巧可有效应对版本号排序需求。
184 3
|
6月前
|
算法 关系型数据库 MySQL
实时计算 Flink版产品使用合集之哪个版本可以做增量快照算法
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
搜索推荐 C语言 C++
【排序算法】C语言实现归并排序,包括递归和迭代两个版本
【排序算法】C语言实现归并排序,包括递归和迭代两个版本
|
6月前
|
搜索推荐 算法 索引
【排序算法】深入解析快速排序(霍尔法&&三指针法&&挖坑法&&优化随机选key&&中位数法&&小区间法&&非递归版本)
【排序算法】深入解析快速排序(霍尔法&&三指针法&&挖坑法&&优化随机选key&&中位数法&&小区间法&&非递归版本)
158 4
|
6月前
|
算法 NoSQL JavaScript
常见的限流算法-python版本
常见的限流算法-python版本
71 0
常见的限流算法-python版本
|
6月前
|
算法 Java
蓝桥杯算法题——题解Java版本——切面条
蓝桥杯算法题——题解Java版本——切面条
82 0
|
11月前
|
搜索推荐 算法 C语言
手撕排序算法3:优化版冒泡排序和快速排序的三种方法(包括三数取中,小区间优化,递归版本)(上)
手撕排序算法3:优化版冒泡排序和快速排序的三种方法(包括三数取中,小区间优化,递归版本)(上)
手撕排序算法3:优化版冒泡排序和快速排序的三种方法(包括三数取中,小区间优化,递归版本)(上)
|
6月前
|
存储 算法 vr&ar
☆打卡算法☆LeetCode 165. 比较版本号 算法解析
☆打卡算法☆LeetCode 165. 比较版本号 算法解析