1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        ?LeetCode刷題實(shí)戰(zhàn)41:缺失的第一個(gè)正數(shù)

        共 887字,需瀏覽 2分鐘

         ·

        2020-09-19 03:22

        算法的重要性,我就不多說(shuō)了吧,想去大廠,就必須要經(jīng)過(guò)基礎(chǔ)知識(shí)和業(yè)務(wù)邏輯面試+算法面試。所以,為了提高大家的算法能力,這個(gè)公眾號(hào)后續(xù)每天帶大家做一道算法題,題目就從LeetCode上面選 !

        今天和大家聊的問(wèn)題叫做?缺失的第一個(gè)正數(shù),我們先來(lái)看題面:

        https://leetcode-cn.com/problems/first-missing-positive/

        Given an unsorted integer array, find the smallest missing?positive integer.

        題意

        給你一個(gè)未排序的整數(shù)數(shù)組,請(qǐng)你找出其中沒(méi)有出現(xiàn)的最小的正整數(shù) 。你的算法的時(shí)間復(fù)雜度應(yīng)為O(n),并且只能使用常數(shù)級(jí)別的額外空間。

        樣例

        示例?1:

        輸入: [1,2,0]
        輸出: 3

        示例?2:

        輸入: [3,4,-1,1]
        輸出: 2

        示例?3:

        輸入: [7,8,9,11,12]
        輸出: 1

        題解

        由于線性時(shí)間和常數(shù)空間的要求,我們開(kāi)不了數(shù)組,用不了哈希表,不能排序。能用的就只有數(shù)組本身以及額外常數(shù)個(gè)變量。。。

        我們考慮如果整數(shù)都出現(xiàn),那么最后數(shù)組排列應(yīng)該是[1,2,3,4,5,…,n],每個(gè)都是遞增1。于是乎,如果我們最后也排列成這種形式,那么只要不滿足nums[i]-nums[i-1]不等于1,那么就找到了最小的未出現(xiàn)的整數(shù),但是我們沒(méi)法排序。

        所以我們可以強(qiáng)行另數(shù)組下標(biāo)和存的值產(chǎn)生聯(lián)系-> 令數(shù)字i出現(xiàn)在下標(biāo)為i-1的位置,如果會(huì)越界則不做處理。
        比如[3,4,-1,1]->[-1,4,3,1]->[-1,1,3,4]->[1,-1,3,4];

        class?Solution?{

        ????????public?int?firstMissingPositive(int[] nums)?{
        ????????????for(int?i=0;i????????????????if(nums[i]>0&&nums[i]<=nums.length&&nums[i]!=nums[nums[i]-1]){
        ????????????????????//確定nums[i]的值對(duì)應(yīng)的下標(biāo)不越界,同時(shí)排除num[i]本身位置正確或者nums[i]應(yīng)該放入的位置nums[i]-1原本就是nums[i](如[1,1])

        ????????????????????int?index = nums[i];//
        ????????????????????nums[i] = nums[index -1];
        ????????????????????nums[index -1]=index;
        ????????????????????//換位置之后需要繼續(xù)判斷換過(guò)來(lái)的值是否在對(duì)的位置上,因此不能i++;
        ????????????????}else{
        ????????????????????i++;
        ????????????????}
        ????????????}
        ????????????for(int?i=0;i????????????????if(nums[i]!=i+1){
        ????????????????????return?i+1;
        ????????????????}
        ????????????}
        ????????????return?nums.length+1;
        ????????}
        ????}


        好了,今天的文章就到這里,如果覺(jué)得有所收獲,請(qǐng)順手點(diǎn)個(gè)在看或者轉(zhuǎn)發(fā)吧,你們的支持是我最大的動(dòng)力。


        上期推文:


        LeetCode1-20題匯總,速度收藏!
        LeetCode21-40題匯總,速度收藏!
        LeetCode刷題實(shí)戰(zhàn)40:組合總和 II


        瀏覽 40
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            影音先锋亚洲男人资源站 | 五月天婷婷激情啪啪啪 | 成人无码激情A片免费看 | 国产又粗又猛又爽视频 | 国产精品国产伦子伦露看 | 美女大胸无遮挡 | 少妇被操 | 喷水h视频 | 大香蕉天天 | 他扒开我的内裤把舌头伸进去视频 |