#27移除元素

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

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

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

示例 1:

給定 nums = [3,2,2,3], val = 3,

函數(shù)應(yīng)該返回新的長度 2, 并且 nums 中的前兩個元素均為 2。

你不需要考慮數(shù)組中超出新長度后面的元素。
示例 2:

給定 nums = [0,1,2,2,3,0,4,2], val = 2,

函數(shù)應(yīng)該返回新的長度 5, 并且 nums 中的前五個元素為 0, 1, 3, 0, 4。

注意這五個元素可為任意順序。

你不需要考慮數(shù)組中超出新長度后面的元素。

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/remove-element
著作權(quán)歸領(lǐng)扣網(wǎng)絡(luò)所有。商業(yè)轉(zhuǎn)載請聯(lián)系官方授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。


這道題,我想了很久,想不出怎么解,當(dāng)一看到不能使用額外的數(shù)組空間,感覺就慫了很多,然后看了一下官方的解答,發(fā)現(xiàn),這也太秀了吧,我怎么沒想到呢~

  • 思路:
    用一個數(shù)組來解釋說明 int[] nums = {0,1,2,2,3,0,4,2}; val = 2
    用兩個指針來記錄,慢指針 i 快指針 j
    遍歷數(shù)組nums, 當(dāng)nums[ j ] != val時,就執(zhí)行 nums[ i ] = nums[ j ],這里是什么意思呢,其實就是重新賦值一下數(shù)組元素,當(dāng)nums[ j ] == val 時,就跳開這個nums[ j ],執(zhí)行下一輪循環(huán),值到 j 角標(biāo)到達(dá) 數(shù)組末尾 ,結(jié)束循環(huán);

    執(zhí)行過程:
    當(dāng) j 角標(biāo)為0 時, nums[ j ] 值為 0,不等于 val 值 2,即 nums[ j ] 值 0 再賦值給自己 nums[ i ],此時 i = 0
    當(dāng) j 角標(biāo)為1 時, nums[ j ] 值為 1,不等于 val 值 2,即 nums[ j ] 值 1 再賦值給自己 nums[ i ],此時 i = 1
    當(dāng) j 角標(biāo)為2 時, nums[ j ] 值為 2,等于 val 值 2,則執(zhí)行下一個循環(huán),此時 i = 2
    當(dāng) j 角標(biāo)為3 時, nums[ j ] 值為 2,等于 val 值 2,則執(zhí)行下一個循環(huán),此時 i = 2 , 但 j 已經(jīng)是3了
    當(dāng) j 角標(biāo)為4 時, nums[ j ] 值為 3,不等于 val 值 2,即 nums[ j ] 值 3 賦值給 nums[ i ],此時 i = 2
    原數(shù)組元素 int[] nums = {0,1,2,2,3,0,4,2}; val = 2
    到目前的步驟后數(shù)組內(nèi)元素為就是int[] nums = {0,1,3,2,3,0,4,2}; val = 2

就是后面的元素替換前面的元素, i 就是要返回的長度,為什么i不用加1呢,因為在最后一次執(zhí)行邏輯中,已經(jīng)執(zhí)行了i++

public static int removeElement(int[] nums, int val) {
        int i = 0;
        for (int j = 0; j < nums.length; j++) {
            if (nums[j] != val) {
                nums[i] = nums[j];
                i++;
            }
        }
        return i;
    }
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Python實現(xiàn): ``` class Solution: def removeElement(self, n...
    raito4閱讀 305評論 0 0
  • 給定一個數(shù)組 nums 和一個值 val,你需要原地移除所有數(shù)值等于 val 的元素,返回移除后數(shù)組的新長度。 不...
    bluescorpio閱讀 347評論 0 1
  • 27.移除元素 給定一個數(shù)組nums和一個值val,你需要原地移除所有數(shù)值等于val的元素,返回移除后數(shù)組的新長度...
    不愛去冒險的少年y閱讀 215評論 0 1
  • 題目:給定一個數(shù)組 nums 和一個值 val,你需要原地移除所有數(shù)值等于 val 的元素,返回移除后數(shù)組的新長度...
    衣錦晝行閱讀 156評論 0 0
  • 20180928-摘抄自27. 移除元素 給定一個數(shù)組 nums 和一個值 val,你需要原地**移除所有數(shù)值等于...
    moralok閱讀 210評論 0 0

友情鏈接更多精彩內(nèi)容