欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Go Java算法之比較版本號方法詳解

 更新時間:2022年08月10日 16:35:33   作者:黃丫丫  
這篇文章主要為大家介紹了Go Java算法之比較版本號方法詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

比較版本號

給你兩個版本號 version1 和 version2 ,請你比較它們。

  • 版本號由一個或多個修訂號組成,各修訂號由一個 '.' 連接。每個修訂號由 多位數(shù)字 組成,可能包含 前導零 。每個版本號至少包含一個字符。
  • 修訂號從左到右編號,下標從 0 開始,最左邊的修訂號下標為 0 ,下一個修訂號下標為 1 ,以此類推。例如,2.5.33 和 0.1 都是有效的版本號。
  • 比較版本號時,請按從左到右的順序依次比較它們的修訂號。比較修訂號時,只需比較 忽略任何前導零后的整數(shù)值 。也就是說,修訂號 1 和修訂號 001 相等 。
  • 如果版本號沒有指定某個下標處的修訂號,則該修訂號視為 0 。例如,版本 1.0 小于版本 1.1 ,因為它們下標為 0 的修訂號相同,而下標為 1 的修訂號分別為 0 和 1 ,0 < 1 。

返回規(guī)則如下:

如果 version1 > version2 返回 1,

如果 version1 < version2 返回 -1,

除此之外返回 0。  

  • 示例 1:

輸入:version1 = "1.01", version2 = "1.001"

輸出:0

解釋:忽略前導零,"01" 和 "001" 都表示相同的整數(shù) "1"

  • 示例 2:

輸入:version1 = "1.0", version2 = "1.0.0"

輸出:0

解釋:version1 沒有指定下標為 2 的修訂號,即視為 "0"

  • 示例 3:

輸入:version1 = "0.1", version2 = "1.1"

輸出:-1

解釋:version1 中下標為 0 的修訂號是 "0",version2 中下標為 0 的修訂號是 "1" 。0 < 1,所以 version1 < version2  

提示:

1 <= version1.length, version2.length <= 500

version1 和 version2 僅包含數(shù)字和 '.'

version1 和 version2 都是 有效版本號

version1 和 version2 的所有修訂號都可以存儲在 32 位整數(shù)

方法一:字符串切割(Java)

我們可以將版本號按照點號分割成修訂號,然后從左到右比較兩個版本號的相同下標的修訂號。在比較修訂號時,需要將字符串轉(zhuǎn)換成整數(shù)進行比較。

通過調(diào)用Java的標準庫即可實現(xiàn)字符串切割

class Solution {
    public int compareVersion(String version1, String version2) {
        String[] v1 = version1.split("\\.");
        String[] v2 = version2.split("\\.");
        for (int i = 0; i < v1.length || i < v2.length; ++i) {
            int x = 0, y = 0;
            if (i < v1.length) {
                x = Integer.parseInt(v1[i]);
            }
            if (i < v2.length) {
                y = Integer.parseInt(v2[i]);
            }
            if (x > y) {
                return 1;
            }
            if (x < y) {
                return -1;
            }
        }
        return 0;
    }
}

時間復雜度:O(m+n)

空間復雜度:O(m+n)

方法二:雙指針(Go)

方法一需要存儲分割后的修訂號,為了優(yōu)化空間復雜度,我們可以在分割版本號的同時解析出修訂號進行比較。

比較兩個版本號大小,版本號由修訂號組成,中間使用'.'分隔,越靠近字符串前邊,修訂號的優(yōu)先級越大。當v1 > v2時返回 1,當v1 < v2時返回 -1,相等時返回 0。

我們使用兩個指針i和j分別指向兩個字符串的開頭,然后向后遍歷,當遇到小數(shù)點'.'時停下來,并將每個小數(shù)點'.'分隔開的修訂號解析成數(shù)字進行比較,越靠近前邊,修訂號的優(yōu)先級越大。根據(jù)修訂號大小關(guān)系,返回相應的數(shù)值。

算法具體流程:

  • 1、定義兩個指針 i和j,初始化i = 0,j = 0。
  • 2、兩個指針分別遍歷兩個字符串,將每個小數(shù)點'.'分隔開的修訂號解析成數(shù)字,并進行大小比較:
    • 如果 num1 > num2,返回 1;
    • 如果 num1 < num2,返回 -1;
  • 3、i++,j++,兩個指針都后移一步,進行下一輪的修訂號解析比較。
  • 4、如果遍歷完兩個字符串都沒有返回相應結(jié)果,說明兩個字符串相等,返回0。
func compareVersion(version1, version2 string) int {
    n, m := len(version1), len(version2)
    i, j := 0, 0
    for i < n || j < m {
        x := 0
        for ; i < n && version1[i] != '.'; i++ {
            x = x*10 + int(version1[i]-'0')
        }
        i++ // 跳過點號
        y := 0
        for ; j < m && version2[j] != '.'; j++ {
            y = y*10 + int(version2[j]-'0')
        }
        j++ // 跳過點號
        if x > y {
            return 1
        }
        if x < y {
            return -1
        }
    }
    return 0
}

時間復雜度:O(m+n)

空間復雜度:O(1)

以上就是Go Java算法之比較版本號方法詳解的詳細內(nèi)容,更多關(guān)于Go Java算法比較版本號的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Spark Streaming算子開發(fā)實例

    Spark Streaming算子開發(fā)實例

    這篇文章主要介紹了Spark Streaming算子開發(fā)實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-06-06
  • java讀取wav文件(波形文件)并繪制波形圖的方法

    java讀取wav文件(波形文件)并繪制波形圖的方法

    這篇文章主要介紹了java讀取wav文件(波形文件)并繪制波形圖的方法,涉及java操作多媒體音頻文件轉(zhuǎn)換的相關(guān)技巧,需要的朋友可以參考下
    2015-06-06
  • SpringBoot2.0集成Swagger2訪問404的解決操作

    SpringBoot2.0集成Swagger2訪問404的解決操作

    這篇文章主要介紹了SpringBoot2.0集成Swagger2訪問404的解決操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • java學習DongTai被動型IAST工具部署過程

    java學習DongTai被動型IAST工具部署過程

    被動型IAST被認為是DevSecOps測試階段實現(xiàn)自動化安全測試的最佳工具,而就在前幾天,洞態(tài)IAST正式開源了,這對于甲方構(gòu)建安全工具鏈來說,絕對是一個大利好
    2021-10-10
  • Java超詳細分析講解final關(guān)鍵字的用法

    Java超詳細分析講解final關(guān)鍵字的用法

    關(guān)于final關(guān)鍵字,它也是我們一個經(jīng)常用的關(guān)鍵字,可以修飾在類上、或者修飾在變量、方法上,以此看來定義它的一些不可變性!像我們經(jīng)常使用的String類中,它便是final來修飾的類,并且它的字符數(shù)組也是被final所修飾的。但是一些final的一些細節(jié)你真的了解過嗎
    2022-06-06
  • 教新手使用java如何對一個大的文本文件內(nèi)容進行去重

    教新手使用java如何對一個大的文本文件內(nèi)容進行去重

    用HashSet對內(nèi)容去重這個過程jvm會內(nèi)存溢出,只能首先將這個大文件中的內(nèi)容讀取出來,對每行String的hashCode取模取正整數(shù),可用取模結(jié)果作為文件名,將相同模數(shù)的行寫入同一個文件,再單獨對每個小文件進行去重,最后再合并
    2021-06-06
  • Java Stream流零基礎教程

    Java Stream流零基礎教程

    Java8的另一大亮點Stream,它與java.io包里的InputStream和OutputStream是完全不同的概念,下面這篇文章主要給大家介紹了關(guān)于Java8中Stream詳細使用方法的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • SpringBoot 集成 ShedLock 分布式鎖的示例詳解

    SpringBoot 集成 ShedLock 分布式鎖的示例詳解

    ShedLock是一個在分布式環(huán)境中使用的定時任務框架,用于解決在分布式環(huán)境中的多個實例的相同定時任務在同一時間點重復執(zhí)行的問題,本文重點給大家介紹SpringBoot 分布式鎖ShedLock的相關(guān)知識,感興趣的朋友一起看看吧
    2021-08-08
  • 完美解決idea moudle沒有藍色的小方塊的問題

    完美解決idea moudle沒有藍色的小方塊的問題

    這篇文章主要介紹了完美解決idea moudle沒有藍色的小方塊的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • IDEA實現(xiàn)添加 前進后退 到工具欄的操作

    IDEA實現(xiàn)添加 前進后退 到工具欄的操作

    這篇文章主要介紹了IDEA 前進 后退 添加到工具欄的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02

最新評論