国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【代碼隨想錄打卡】快慢指針

這篇具有很好參考價(jià)值的文章主要介紹了【代碼隨想錄打卡】快慢指針。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

力扣鏈接:?力扣

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

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

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

示例 1: 給定 nums = [3,2,2,3], val = 3, 函數(shù)應(yīng)該返回新的長(zhǎng)度 2, 并且 nums 中的前兩個(gè)元素均為 2。 你不需要考慮數(shù)組中超出新長(zhǎng)度后面的元素。

示例?2: 給定 nums = [0,1,2,2,3,0,4,2], val = 2, 函數(shù)應(yīng)該返回新的長(zhǎng)度 5, 并且 nums 中的前五個(gè)元素為 0, 1, 3, 0, 4。

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

思路:考慮兩個(gè)指針同時(shí)看這個(gè)nums數(shù)組,快指針跑的快一些(每一個(gè)循環(huán)都往后走一步),可以先去后面看看元素是什么。而慢指針走的慢一些(只有當(dāng)快指針丟給他符合條件也就是nums[fast]!=val時(shí)才更新),這樣慢指針接收到的數(shù)永遠(yuǎn)是fast篩選過符合條件的數(shù)。當(dāng)fast走完一遍,slow指向的就是最后一個(gè)符合條件的數(shù)的下一個(gè)位置。

# 1.快慢指針同向,相當(dāng)于快指針先跑到后面看看,把后面nums中不是val的值丟給慢指針,慢指針只負(fù)責(zé)接受不等于val的值
def removeElement(nums, val):
    slow = 0
    fast = 0
    while fast<len(nums):# 快指針看完一遍就該退出了,此時(shí)慢指針一定能使所有不為val的值都排在前面
        if nums[fast]!=val:# 快指針看完發(fā)現(xiàn)這個(gè)值不是val,就丟給慢指針
            nums[slow] = nums[fast]
            slow += 1
        fast += 1
    return slow

nums = [0,1,2,2,3,0,4,2]
val = 2
print(removeElement(nums, val))

如果刪除指定val元素后剩余元素的順序不要求和原來相等,那我們還可以用對(duì)撞指針,類似與快排用到的方法。文章來源地址http://www.zghlxwxcb.cn/news/detail-524621.html

# 2.對(duì)撞指針,有點(diǎn)像快排,從左往右找到一個(gè)為val的值,再從右往左找一個(gè)不為val的值,把找到的兩個(gè)數(shù)交換,這樣所有不為val都會(huì)被換到前面
def removeElement(nums, val):
    left = 0
    right = len(nums)-1
    while left<=right:# left>right時(shí)可以退出了,必定已經(jīng)交換完所有該交換的數(shù)了
        while nums[left] != val:
            left += 1
        while nums[right]==val:
            right -= 1
        if left<right:
            nums[left], nums[right] = nums[right], nums[left]
    return left + 1 if nums[left]!=val else left

nums = [0,1,2,2,3,0,4,2]
val = 2
print(removeElement(nums, val))

到了這里,關(guān)于【代碼隨想錄打卡】快慢指針的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 代碼隨想錄補(bǔ)打卡 56 合并區(qū)間

    56 合并區(qū)間? 代碼如下 func?merge(intervals?[][]int)?[][]int?{ ????????sort.Slice(intervals,func(i,j?int)bool{? //將數(shù)組按左邊界的大小排序 ????????return?intervals[i][0]intervals[j][0] ????}) ????res?:=?make([][]int,0) //定義一個(gè)目標(biāo)數(shù)組 ????res?=?append(res,intervals[0])? //先將數(shù)組的第

    2024年02月02日
    瀏覽(87)
  • 代碼隨想錄打卡—day41—【DP】— 8.26+27 DP基礎(chǔ)3

    343.?整數(shù)拆分 一開始做?沒有思路,學(xué)習(xí)了題解才,ac代碼: 后來仔細(xì)看題解,其實(shí) for - j?的次數(shù)可以優(yōu)化—— 注意 枚舉j的時(shí)候,是從1開始的。從0開始的話,那么讓拆分一個(gè)數(shù)拆個(gè)0,求最大乘積就沒有意義了。 優(yōu)化1: j 的結(jié)束條件是 j i - 1 ,其實(shí) j i 也是可以的,不過

    2024年02月11日
    瀏覽(20)
  • 代碼隨想錄打卡第56天|583. 兩個(gè)字符串的刪除操作;72. 編輯距離

    583. 兩個(gè)字符串的刪除操作 關(guān)鍵點(diǎn)1:dp數(shù)組的含義 dp[i][j],使得以i-1為結(jié)尾word1 和 以j-1為結(jié)尾的word2 相同所需的最小步數(shù); 關(guān)鍵點(diǎn)2:遞歸公式的推導(dǎo) if(nums1[i-1] == nums2[j-1]),則i和j同時(shí)移動(dòng),所以為i-1,j-1;dp[i][j] = dp[i-1][j-1];由于不需要進(jìn)行刪除操作,所以不需要加1 如果不相

    2023年04月19日
    瀏覽(34)
  • 算法隨想錄第三十九天打卡|62.不同路徑 , 63. 不同路徑 II

    本題大家掌握動(dòng)態(tài)規(guī)劃的方法就可以。?數(shù)論方法?有點(diǎn)非主流,很難想到。? 代碼隨想錄 視頻講解: 動(dòng)態(tài)規(guī)劃中如何初始化很重要!| LeetCode:62.不同路徑_嗶哩嗶哩_bilibili 總結(jié) 把m和n弄反了。 https://programmercarl.com/0063.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84II.htmlhttps://programmercarl.com/00

    2024年01月20日
    瀏覽(37)
  • 算法隨想錄第三十八天打卡| 理論基礎(chǔ) , 509. 斐波那契數(shù), 70. 爬樓梯 , 746. 使用最小花費(fèi)爬樓梯

    ?理論基礎(chǔ)? 無論大家之前對(duì)動(dòng)態(tài)規(guī)劃學(xué)到什么程度,一定要先看?我講的?動(dòng)態(tài)規(guī)劃理論基礎(chǔ)。? 如果沒做過動(dòng)態(tài)規(guī)劃的題目,看我講的理論基礎(chǔ),會(huì)有感覺?是不是簡(jiǎn)單題想復(fù)雜了?? 其實(shí)并沒有,我講的理論基礎(chǔ)內(nèi)容,在動(dòng)規(guī)章節(jié)所有題目都有運(yùn)用,所以很重要!?? 如果

    2024年01月18日
    瀏覽(26)
  • 代碼隨想錄刷題

    代碼隨想錄刷題

    704. 二分查找 27. 移除元素

    2024年01月25日
    瀏覽(29)
  • 代碼隨想錄——貪心算法

    代碼隨想錄——貪心算法

    代碼隨想錄——回溯 代碼隨想錄——貪心算法 分發(fā)餅干 鏈接:https://leetcode.cn/problems/assign-cookies/description/ 這道題我自己一開始的想法是從大到小遍歷孩子數(shù)組,對(duì)于每個(gè)元素從大到小遍歷餅干數(shù)組,滿足則total+1,并且該元素置0防止被再次使用。這樣雖然是可以的,但時(shí)間復(fù)

    2024年02月22日
    瀏覽(92)
  • 代碼隨想錄——回溯

    代碼隨想錄——回溯

    代碼隨想錄——回溯 回溯的本質(zhì)就是遞歸遍歷,但在完成某一條路之后會(huì)撤回到上一層,然后重新選擇另一條路繼續(xù)遍歷,是一個(gè)比較低效的算法,能進(jìn)行提升的方式就是剪枝。 組合 鏈接:https://leetcode.cn/problems/combinations/description/ vectorvector int 作為最終返回的結(jié)果,vector

    2024年01月19日
    瀏覽(594)
  • [代碼隨想錄]二叉樹

    [代碼隨想錄]二叉樹

    二叉樹可以鏈?zhǔn)酱鎯?chǔ),也可以順序存儲(chǔ)。 那么鏈?zhǔn)酱鎯?chǔ)方式就用指針, 順序存儲(chǔ)的方式就是用數(shù)組。 顧名思義就是順序存儲(chǔ)的元素在內(nèi)存是連續(xù)分布的,而鏈?zhǔn)酱鎯?chǔ)則是通過指針把分布在各個(gè)地址的節(jié)點(diǎn)串聯(lián)一起。 鏈?zhǔn)酱鎯?chǔ)如圖: 鏈?zhǔn)酱鎯?chǔ)是大家很熟悉的一種方式,那么

    2024年02月03日
    瀏覽(25)
  • 代碼隨想錄 - 鏈表

    代碼隨想錄 - 鏈表

    鏈表是一種通過指針串聯(lián)的線性結(jié)構(gòu),每一個(gè)節(jié)點(diǎn)由兩部分組成,一個(gè)是數(shù)據(jù)域一個(gè)是指針域(存放指向下一個(gè)節(jié)點(diǎn)的指針),最后一個(gè)節(jié)點(diǎn)的指針域指向null(空指針的意思)。 鏈表的類型? 1、單鏈表? 單鏈表中的指針域只能指向節(jié)點(diǎn)的下一個(gè)節(jié)點(diǎn)。? 2、雙鏈表 雙鏈表:

    2024年02月13日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包