国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

LEETCODE刷題記錄【27 Remove Element】

馬龍駒 / 3171人閱讀

摘要:復(fù)雜度分析時(shí)間復(fù)雜度遍歷次空間復(fù)雜度還有沒有優(yōu)化空間方法在某些特定場(chǎng)景下會(huì)進(jìn)行不必要的復(fù)制操作,影響性能。注意尾部的元素有可能是需要剔除的,所以,下一輪循環(huán)要從當(dāng)前索引重新開始。

給定一個(gè)數(shù)組 nums?和一個(gè)值 val,你需要原地移除所有數(shù)值等于?val?的元素,返回移除后數(shù)組的新長(zhǎng)度。

不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成。

元素的順序可以改變。你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。

1.先來寫一個(gè)最簡(jiǎn)單的版本,即使用額外空間作為輔助,把符合條件的元素寫到一個(gè)新的數(shù)組里。

public static ArrayList removeElement(int[] nums, int val)
{

    ArrayList newNums = new ArrayList();
    for (int item:nums)
    {
        if(item != val)
        {
            newNums.add(item);
        }
    }
    System.out.print(newNums.size());
    return newNums;
}

基礎(chǔ)知識(shí)查漏補(bǔ)缺:
1.Java數(shù)組的聲明、初始化和使用
遇到了一個(gè)問題,新的數(shù)組需要聲明和初始化,但是新數(shù)組的長(zhǎng)度還不知道,怎么初始化。
考慮使用ArrayList
2.ArrayList的聲明和使用
3.靜態(tài)方法中調(diào)用非靜態(tài)方法的限制

上述方法:
1.需要遍歷數(shù)組一次,所以時(shí)間復(fù)雜度是o(n)
2.需要使用一個(gè)數(shù)組作為額外空間,所以空間復(fù)雜度是o(n)

2.還有沒有優(yōu)化空間?
進(jìn)階版本--降低空間復(fù)雜度
思路:
方法1需要開辟一個(gè)新的數(shù)組空間,然而題目中給定的說明,不需要考慮數(shù)組中超出長(zhǎng)度后面的元素,可以考慮把舊數(shù)組的空間再利用。
由于必須要根據(jù)索引替換數(shù)組的值,所以不能用For-Each循環(huán)方法。

public static int removeElement(int[] nums, int val)
{
    int j = 0;
    for (int i = 0;i < nums.length;i++)
    {
        if(nums[i] != val)
        {
            nums[j] = nums[i];
            j++;
        }
    }
    System.out.print(j);
    return j;
}

復(fù)雜度分析:
時(shí)間復(fù)雜度:o(n) 遍歷2n次
空間復(fù)雜度:o(1)

3.還有沒有優(yōu)化空間?
方法2在某些特定場(chǎng)景下會(huì)進(jìn)行不必要的復(fù)制操作,影響性能。比如{1,2,3,5,4} val=4,或者{4,1,2,3,5},似乎沒有必要把前4個(gè)元素復(fù)制一遍,在這一點(diǎn)上可以進(jìn)行優(yōu)化,優(yōu)化思路為如果匹配到需要剔除的元素,就把數(shù)組末尾的元素替換到這個(gè)位置來。注意:尾部的元素有可能是需要剔除的,所以,下一輪循環(huán)要從當(dāng)前索引重新開始。

public static int removeElement(int[] nums, int val)
{
    int n = nums.length;
    System.out.print(n);
    for (int i = 0;i < n;i++)
    {
        if(nums[i] == val)
        {
            nums[i] = nums[n-1];
            i--;
            n--;
            System.out.println("1:n--:"+n);
        }
    }
    System.out.print(n);
    return n;
}

遇到的問題:
1.在循環(huán)里,把nums.length作為了固定長(zhǎng)度,會(huì)導(dǎo)致所有元素都被遍歷,實(shí)際上被替換到前面的元素不需要被遍歷,導(dǎo)致了bug
2.在使用i--時(shí),考慮如果數(shù)組前幾個(gè)元素都是需要被剔除的元素,會(huì)不會(huì)導(dǎo)致index為負(fù),導(dǎo)致溢出。經(jīng)過分析和實(shí)驗(yàn)不會(huì),因?yàn)槊看窝h(huán)結(jié)束i都要++

復(fù)雜度分析:
時(shí)間復(fù)雜度:o(n) 遍歷n次
空間復(fù)雜度:o(1)

總結(jié):
1.學(xué)會(huì)的新方法,雙指針法
2.如果沒有普遍的優(yōu)化方法,那么就考慮業(yè)務(wù)場(chǎng)景的特點(diǎn),比如方法三,針對(duì)某些特殊場(chǎng)景提出優(yōu)化空間。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/77820.html

相關(guān)文章

  • leetcode-27. Remove Element

    摘要:題目闡釋根據(jù)告知的元素,從列表中刪除,并計(jì)算剩余元素的個(gè)數(shù)重點(diǎn)通過移動(dòng)一個(gè)列表的元素,記錄位置,將一個(gè)列表內(nèi)的所有元素分類。 題目闡釋: 根據(jù)告知的元素,從列表中刪除,并計(jì)算剩余元素的個(gè)數(shù) 重點(diǎn): 通過移動(dòng)一個(gè)列表的元素,記錄index位置,將一個(gè)列表內(nèi)的所有元素分類。 計(jì)算剩余元素的個(gè)數(shù),也可以看成先分類,再統(tǒng)計(jì)。 Given an array nums and a value va...

    cgspine 評(píng)論0 收藏0
  • leetcode刷題記錄--【80 Remove Duplicates from Sorted Ar

    摘要:給定一個(gè)排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個(gè)元素最多出現(xiàn)兩次,返回移除后數(shù)組的新長(zhǎng)度。正確思路對(duì)于每一個(gè)元素,都進(jìn)行移動(dòng)。或者比較不到最后一個(gè)對(duì)象。 給定一個(gè)排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個(gè)元素最多出現(xiàn)兩次,返回移除后數(shù)組的新長(zhǎng)度。不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用 O(1) 額外空間的條件下完成。 錯(cuò)誤思路:由26題跳過一個(gè)的思...

    haobowd 評(píng)論0 收藏0
  • leetcode刷題記錄-【26 Remove Duplicates from Sorted Ar

    摘要:給定一個(gè)排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個(gè)元素只出現(xiàn)一次,返回移除后數(shù)組的新長(zhǎng)度。不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組并在使用額外空間的條件下完成。聲明兩個(gè)指針,為快指針,為慢指針如果遇到相同的數(shù),那么就跳過,。 給定一個(gè)排序數(shù)組,你需要在原地刪除重復(fù)出現(xiàn)的元素,使得每個(gè)元素只出現(xiàn)一次,返回移除后數(shù)組的新長(zhǎng)度。不要使用額外的數(shù)組空間,你必須在原地修改輸入數(shù)組...

    heartFollower 評(píng)論0 收藏0
  • Leetcode 27 Remove Element

    摘要:同時(shí)我們將這個(gè)元素賦值給,這樣就可以保證,不等于的個(gè)元素完美占據(jù)數(shù)組的前個(gè)位置。方法二當(dāng)我們遇到和等于值的元素的時(shí)候,我們將數(shù)組尾端的元素和此元素交換位置。之后減少一位遍歷長(zhǎng)度。同時(shí)在下次遍歷中,我們會(huì)重新檢查新過來的元素。 題目介紹 要求輸入:給定數(shù)組nums[],數(shù)字val要求輸出:數(shù)組中不等于val的元素個(gè)數(shù)n,同時(shí)要求不等于數(shù)字val的n個(gè)元素放置在數(shù)組的前n個(gè)位置(不要求順序...

    _ipo 評(píng)論0 收藏0
  • 13. 羅馬數(shù)字轉(zhuǎn)整數(shù)-----leetcode刷題(python解題)

    摘要:題目羅馬數(shù)字包含以下七種字符,,,,,和。字符數(shù)值例如,羅馬數(shù)字寫做,即為兩個(gè)并列的。通常情況下,羅馬數(shù)字中小的數(shù)字在大的數(shù)字的右邊。同樣地,數(shù)字表示為。給定一個(gè)羅馬數(shù)字,將其轉(zhuǎn)換成整數(shù)。 [TOC] 題目 羅馬數(shù)字包含以下七種字符: I, V, X, L,C,D 和 M。 字符 數(shù)值 I 1 V 5 X ...

    Gu_Yan 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<