首页 > 试题广场 >

比较版本号

[编程题]比较版本号
  • 热度指数:113276 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
牛客项目发布项目版本时会有版本号,比如1.02.11,2.14.4等等
现在给你2个版本号version1和version2,请你比较他们的大小
版本号是由修订号组成,修订号与修订号之间由一个"."连接。1个修订号可能有多位数字组成,修订号可能包含前导0,且是合法的。例如,1.02.11,0.1,0.2都是合法的版本号
每个版本号至少包含1个修订号。
修订号从左到右编号,下标从0开始,最左边的修订号下标为0,下一个修订号下标为1,以此类推。

比较规则:
一. 比较版本号时,请按从左到右的顺序依次比较它们的修订号。比较修订号时,只需比较忽略任何前导零后的整数值。比如"0.1"和"0.01"的版本号是相等的
二. 如果版本号没有指定某个下标处的修订号,则该修订号视为0。例如,"1.1"的版本号小于"1.1.1"。因为"1.1"的版本号相当于"1.1.0",第3位修订号的下标为0,小于1
三.  version1 > version2 返回1,如果 version1 < version2 返回-1,不然返回0.

数据范围:
version1 和 version2 的修订号不会超过int的表达范围,即不超过 32 位整数 的范围

进阶: 空间复杂度 , 时间复杂度
示例1

输入

"1.1","2.1"

输出

-1

说明

version1 中下标为 0 的修订号是 "1",version2 中下标为 0 的修订号是 "2" 。1 < 2,所以 version1 < version2,返回-1
示例2

输入

"1.1","1.01"

输出

0

说明

version2忽略前导0,为"1.1",和version相同,返回0          
示例3

输入

"1.1","1.1.1"

输出

-1

说明

"1.1"的版本号小于"1.1.1"。因为"1.1"的版本号相当于"1.1.0",第3位修订号的下标为0,小于1,所以version1 < version2,返回-1          
示例4

输入

"2.0.1","2"

输出

1

说明

version1的下标2>version2的下标2,返回1          
示例5

输入

"0.226","0.36"

输出

1

说明

226>36,version1的下标2>version2的下标2,返回1          
//字符串切割
function compare(version1, version2) {
    ver1 = version1.split(".");
    ver2 = version2.split(".");
    const length = Math.max(ver1.length, ver2.length);
    for (let i = 0; i < length; i++) {
        v1 = parseInt(ver1[i]) || 0;
        v2 = parseInt(ver2[i]) || 0;
        if (v1 > v2) {
            return 1;
        } else if (v2 > v1) {
            return -1;
        }
    }
    return 0;
}
发表于 2024-10-10 16:07:24 回复(0)
function compare(version1, version2) {
    // write code here
    let num1 = version1.split(".").map((c) => +c);
    let num2 = version2.split(".").map((c) => +c);
    while (num1.length < num2.length) {
        num1.push(0);
    }
    while (num1.length > num2.length) {
        num2.push(0);
    }
    console.log(num1, num2);
    let i = 0;
    while (i < num1.length) {
        if (num1[i] > num2[i]) {
            return 1;
        } else if (num1[i] < num2[i]) {
            return -1;
        } else {
            i++;
        }
    }
    return 0;
}

发表于 2023-08-29 21:39:14 回复(0)
function compare( version1 ,  version2 ) {
    // write code here
    let v1=version1.match(/\d+/g)
    let v2=version2.match(/\d+/g)
    let i=0
    while(v1[i]||v2[i]){
        if(i>=v1.length){
            return parseInt(v2[i])!==0?-1:0
        }
        if(i>=v2.length){
            return parseInt(v2[i])!==0?1:0;
        }
        if(parseInt(v1[i])>parseInt(v2[i])){
            return 1
        }else if(parseInt(v1[i])<parseInt(v2[i])){
            return -1
        }else{
            i++;
        }
    }
    return 0;
}
发表于 2023-03-31 23:41:06 回复(0)
function compare(version1, version2) {
  const arr1 = version1.split(".");
  const arr2 = version2.split(".");
  for (let i = 0; i < Math.max(arr1.length, arr2.length); i++) {
    let tmp1 = i < arr1.length ? parseInt(arr1[i]) : 0;
    let tmp2 = i < arr2.length ? parseInt(arr2[i]) : 0;
    if (tmp1 > tmp2) return 1;
    if (tmp1 < tmp2) return -1;
  }
  return 0;
}

发表于 2022-10-21 10:15:27 回复(0)
function compare( version1 ,  version2 ) {
    // write code here
    const items1 = version1.split('.').map(item => (+item));
    const items2 = version2.split('.').map(item => (+item));
    let i = 0, j = 0, LEN1 = items1.length, LEN2 = items2.length;
    
    while (i < LEN1 || j < LEN2) {
        if ((items1[i]||0) < (items2[j]||0)) {
            return -1;
        } else if ((items1[i] || 0) > (items2[j] || 0)) {
            return 1;
        }
        i++;
        j++;
    }
    return 0;
}
发表于 2022-05-25 17:51:20 回复(0)