最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Go Java算法之比較版本號(hào)方法詳解

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

比較版本號(hào)

給你兩個(gè)版本號(hào) version1 和 version2 ,請(qǐng)你比較它們。

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

返回規(guī)則如下:

如果 version1 > version2 返回 1,

如果 version1 < version2 返回 -1,

除此之外返回 0。  

  • 示例 1:

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

輸出:0

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

  • 示例 2:

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

輸出:0

解釋:version1 沒有指定下標(biāo)為 2 的修訂號(hào),即視為 "0"

  • 示例 3:

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

輸出:-1

解釋:version1 中下標(biāo)為 0 的修訂號(hào)是 "0",version2 中下標(biāo)為 0 的修訂號(hào)是 "1" 。0 < 1,所以 version1 < version2  

提示:

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

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

version1 和 version2 都是 有效版本號(hào)

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

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

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

通過(guò)調(diào)用Java的標(biāo)準(zhǔn)庫(kù)即可實(shí)現(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;
    }
}

時(shí)間復(fù)雜度:O(m+n)

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

方法二:雙指針(Go)

方法一需要存儲(chǔ)分割后的修訂號(hào),為了優(yōu)化空間復(fù)雜度,我們可以在分割版本號(hào)的同時(shí)解析出修訂號(hào)進(jìn)行比較。

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

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

算法具體流程:

  • 1、定義兩個(gè)指針 i和j,初始化i = 0,j = 0。
  • 2、兩個(gè)指針?lè)謩e遍歷兩個(gè)字符串,將每個(gè)小數(shù)點(diǎn)'.'分隔開的修訂號(hào)解析成數(shù)字,并進(jìn)行大小比較:
    • 如果 num1 > num2,返回 1;
    • 如果 num1 < num2,返回 -1;
  • 3、i++,j++,兩個(gè)指針都后移一步,進(jìn)行下一輪的修訂號(hào)解析比較。
  • 4、如果遍歷完兩個(gè)字符串都沒有返回相應(yīng)結(jié)果,說(shuō)明兩個(gè)字符串相等,返回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++ // 跳過(guò)點(diǎn)號(hào)
        y := 0
        for ; j < m && version2[j] != '.'; j++ {
            y = y*10 + int(version2[j]-'0')
        }
        j++ // 跳過(guò)點(diǎn)號(hào)
        if x > y {
            return 1
        }
        if x < y {
            return -1
        }
    }
    return 0
}

時(shí)間復(fù)雜度:O(m+n)

空間復(fù)雜度:O(1)

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

相關(guān)文章

  • JAVA中split函數(shù)的常見用法實(shí)例

    JAVA中split函數(shù)的常見用法實(shí)例

    Java中我們可以利用split把字符串按照指定的分割符進(jìn)行分割,然后返回字符串?dāng)?shù)組,下面這篇文章主要給大家介紹了關(guān)于JAVA中split函數(shù)的常見用法,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-07-07
  • 舉例講解Java中final關(guān)鍵字的用法

    舉例講解Java中final關(guān)鍵字的用法

    Java中的final關(guān)鍵字可以被用來(lái)修飾變量、方法和類等,意味著終結(jié)、不可改變,下面我們就來(lái)舉例講解Java中final關(guān)鍵字的用法:
    2016-06-06
  • java編程學(xué)習(xí)輸入輸出詳解看完快速上手

    java編程學(xué)習(xí)輸入輸出詳解看完快速上手

    這篇文章主要介紹了java編程學(xué)習(xí)輸入輸出到控制臺(tái)的知識(shí)詳解,看完就可以快速上手了,有需要的朋友可以借鑒參考下,希望能夠有所幫助
    2021-10-10
  • 詳解mybatis如何實(shí)現(xiàn)進(jìn)行分表

    詳解mybatis如何實(shí)現(xiàn)進(jìn)行分表

    在數(shù)據(jù)庫(kù)設(shè)計(jì)中,分表是一種常見的優(yōu)化策略,它可以將一個(gè)大表拆分成多個(gè)小表,以提高查詢性能和存儲(chǔ)效率,下面我們就來(lái)學(xué)習(xí)一下mybatis如何實(shí)現(xiàn)進(jìn)行分表吧
    2023-11-11
  • Java自定義一個(gè)變長(zhǎng)數(shù)組的思路與代碼

    Java自定義一個(gè)變長(zhǎng)數(shù)組的思路與代碼

    有時(shí)我們希望將把數(shù)據(jù)保存在單個(gè)連續(xù)的數(shù)組中,以便快速、便捷地訪問(wèn)數(shù)據(jù),但這需要調(diào)整數(shù)組大小或者對(duì)其擴(kuò)展,下面這篇文章主要給大家介紹了關(guān)于Java自定義一個(gè)變長(zhǎng)數(shù)組的思路與代碼,需要的朋友可以參考下
    2022-12-12
  • javaweb 國(guó)際化:DateFormat,NumberFormat,MessageFormat,ResourceBundle的使用

    javaweb 國(guó)際化:DateFormat,NumberFormat,MessageFormat,ResourceBu

    本文主要介紹javaWEB國(guó)際化的知識(shí),這里整理了詳細(xì)的資料及實(shí)現(xiàn)代碼,有興趣的小伙伴可以參考下
    2016-09-09
  • Mybatis懶加載的實(shí)現(xiàn)

    Mybatis懶加載的實(shí)現(xiàn)

    這篇文章主要介紹了Mybatis懶加載的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • 關(guān)于Java并發(fā)編程中線程間協(xié)作的兩種方式

    關(guān)于Java并發(fā)編程中線程間協(xié)作的兩種方式

    這篇文章主要介紹了關(guān)于Java并發(fā)編程中線程間協(xié)作的兩種方式,當(dāng)隊(duì)列滿時(shí),生產(chǎn)者需要等待隊(duì)列有空間才能繼續(xù)往里面放入商品,而在等待的期間內(nèi),生產(chǎn)者必須釋放對(duì)臨界資源的占用權(quán),這是消費(fèi)者模式,需要的朋友可以參考下
    2023-07-07
  • java實(shí)現(xiàn)單詞查詢小程序

    java實(shí)現(xiàn)單詞查詢小程序

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)單詞查詢小程序,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • Java8 Collectors求和功能的自定義擴(kuò)展操作

    Java8 Collectors求和功能的自定義擴(kuò)展操作

    這篇文章主要介紹了Java8 Collectors求和功能的自定義擴(kuò)展操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02

最新評(píng)論

衡东县| 苗栗市| 凉城县| 通许县| 观塘区| 青阳县| 灵宝市| 高陵县| 西吉县| 甘德县| 阜城县| 德钦县| 楚雄市| 大新县| 双牌县| 连城县| 讷河市| 承德县| 英吉沙县| 汉沽区| 兰州市| 安塞县| 汪清县| 西乡县| 库伦旗| 资中县| 公主岭市| 枣庄市| 铜川市| 会泽县| 霍林郭勒市| 邯郸市| 蓬莱市| 金溪县| 漯河市| 灯塔市| 禹州市| 马龙县| 永定县| 丰镇市| 乐至县|