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

LeetCode 雙周賽 106(2023/06/10)兩道思維題

這篇具有很好參考價(jià)值的文章主要介紹了LeetCode 雙周賽 106(2023/06/10)兩道思維題。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本文已收錄到 AndroidFamily,技術(shù)和職場(chǎng)問題,請(qǐng)關(guān)注公眾號(hào) [彭旭銳] 加入知識(shí)星球提問。

  • 往期回顧:LeetCode 單周賽第 348 場(chǎng) · 數(shù)位 DP 模版學(xué)會(huì)了嗎?

雙周賽 106 概覽

T1. 判斷一個(gè)數(shù)是否迷人(Easy)

  • 標(biāo)簽:計(jì)數(shù)

T2. 找到最長(zhǎng)的半重復(fù)子字符串(Medium)

  • 標(biāo)簽:同向雙指針

T3. 移動(dòng)機(jī)器人(Medium)

  • 標(biāo)簽:腦筋急轉(zhuǎn)彎、排序

T4. 找到矩陣中的好子集(Hard)

  • 標(biāo)簽:散列表、貪心

T1. 判斷一個(gè)數(shù)是否迷人(Easy)

https://leetcode.cn/problems/check-if-the-number-is-fascinating/description/

題解一(計(jì)數(shù))

  • 計(jì)算拼接后的數(shù)字,并檢查數(shù)字 1 到 9 的數(shù)量是否為 1,可以用字符串比較來模擬計(jì)數(shù);
  • 觀察數(shù)字規(guī)律,合法 n 的有效范圍是 [123, 329]。
class Solution {
    fun isFascinating(n: Int): Boolean {
        if (n !in 123..329) return false
        return "123456789" == "$n${2*n}${3*n}".asSequence().sorted().joinToString("")
    }
}

復(fù)雜度分析:

  • 時(shí)間復(fù)雜度:O(UlgU) U 是單個(gè)數(shù)字的最大長(zhǎng)度
  • 空間復(fù)雜度:O(U)

題解二(打表)

題目范圍中只有 4 個(gè)迷人數(shù)。

class Solution {
    fun isFascinating(n: Int): Boolean {
        return n in arrayOf(192, 219, 273, 327)
    }
}

復(fù)雜度分析:

  • 時(shí)間復(fù)雜度:O(1)
  • 空間復(fù)雜度:O(1)

T2. 找到最長(zhǎng)的半重復(fù)子字符串(Medium)

https://leetcode.cn/problems/find-the-longest-semi-repetitive-substring/

題解(同向雙指針)

維護(hù)滑動(dòng)窗口,如果右指針與前一個(gè)位置相同,說明增加一個(gè)相鄰重復(fù)對(duì)。

當(dāng)相鄰重復(fù)對(duì) repeatCnt 大于 1 時(shí),此時(shí)需要收縮左指針,如果左指針與右邊后一個(gè)位置相同,說明減少一個(gè)相鄰重復(fù)對(duì)(由于 repeatCnt 大于 1 時(shí)左指針不可能超過窗口,所以不需要檢查左指針移動(dòng)越界)。

class Solution {
    fun longestSemiRepetitiveSubstring(s: String): Int {
        val n = s.length
        var ret = 0
        var i = 0
        var repeatCnt = 0
        for (j in 0 until n) {
            // 移動(dòng)右指針
            if (j > 0 && s[j] == s[j - 1]) repeatCnt ++
            while (repeatCnt > 1) {
                // 移動(dòng)左指針
                if (s[i] == s[i + 1]) repeatCnt --
                i++
            }
            // 記錄結(jié)果
            ret = Math.max(ret, j - i + 1)
        }
        return ret
    }
}

復(fù)雜度分析:

  • 時(shí)間復(fù)雜度:O(n)
  • 空間復(fù)雜度:O(1)

T3. 移動(dòng)機(jī)器人(Medium)

https://leetcode.cn/problems/movement-of-robots/

題解(模擬 + 排序)

注意到當(dāng)發(fā)生碰撞而改變機(jī)器人方向時(shí),我們可以對(duì)調(diào)機(jī)器人身份,此時(shí)等價(jià)于沒有發(fā)生碰撞且機(jī)器人按照正常方向行駛,因此我們可以直接忽視碰撞規(guī)則,計(jì)算機(jī)器人的最終位置并計(jì)算兩兩距離。

為了計(jì)算兩兩距離,我們先對(duì)所有點(diǎn)排序。由于兩個(gè)機(jī)器人的距離公式是 x - y,那么對(duì)于每個(gè)機(jī)器人 nums[i],在距離公式中它將作為 i 次 x 做加法,以及作為 (n -1 - i) 次 y 做解法,可以枚舉每個(gè)機(jī)器人對(duì)距離公式的貢獻(xiàn)度而算出整體的兩兩距離和。

class Solution {
    fun sumDistance(nums: IntArray, s: String, d: Int): Int {
        val n = nums.size
        val MOD = 1000000007
        // 移動(dòng)(忽視碰撞)
        for (i in nums.indices) {
            nums[i] += if (s[i] == 'R') d else -d
        }
        // 排序
        nums.sort()
        // 計(jì)算兩兩距離
        var ret = 0L
        for (i in nums.indices) {
            ret = (ret + (2L * i - n + 1) * nums[i]) % MOD
        }
        return ret.toInt()
    }
}

復(fù)雜度分析:

  • 時(shí)間復(fù)雜度:O(nlgn) 瓶頸在排序
  • 空間復(fù)雜度:O(lgn)

相似題目:

  • 1503.?所有螞蟻掉下來前的最后一刻

T4. 找到矩陣中的好子集(Hard)

https://leetcode.cn/problems/find-a-good-subset-of-the-matrix/

題解(散列 + 貪心)

容易想到,我們需要選擇出 1 相對(duì)稀疏的那些行(但不一定是最稀疏的行),而且重復(fù)選擇完全相同的行不會(huì)對(duì)結(jié)果產(chǎn)生價(jià)值,所以我們先對(duì)行去重。

由于題目最多只有5 列,所有最多只有 2^5=32 種行類型,可以證明題目在 n = 5 的情況下,有效解最多只有 2 行。

class Solution {
    fun goodSubsetofBinaryMatrix(grid: Array<IntArray>): List<Int> {
        val n = grid.size
        val m = grid[0].size
        // 分組
        val U = 32 // 0 - 31
        val indexs = IntArray(U) { -1 }
        for ((i, row) in grid.withIndex()) {
            var mask = 0
            for ((j, e) in row.withIndex()) {
                mask = mask or (e shl j)
            }
            indexs[mask] = i
        }
        // 全 0
        if (-1 != indexs[0]) return listOf(indexs[0])
        // 貪心
        for (x in 1 until U) {
            for (y in 1 until U) {
                // 過濾
                if (-1 == indexs[x] || -1 == indexs[y]) continue
                // 是否互補(bǔ)
                if (x and y == 0) return listOf(indexs[x], indexs[y]).sorted()
            }
        }
        return Collections.emptyList()
    }
}

復(fù)雜度分析:文章來源地址http://www.zghlxwxcb.cn/news/detail-479047.html

  • 時(shí)間復(fù)雜度:O(n + U^2) U = 32
  • 空間復(fù)雜度:O(U)

往期回顧

  • LeetCode 單周賽第 348 場(chǎng) · 數(shù)位 DP 模版學(xué)會(huì)了嗎?
  • LeetCode 單周賽第 347 場(chǎng) · 二維空間上的 LIS 最長(zhǎng)遞增子序列問題
  • LeetCode 雙周賽第 104 場(chǎng) · 流水的動(dòng)態(tài)規(guī)劃,鐵打的結(jié)構(gòu)化思考
  • LeetCode 雙周賽第 103 場(chǎng) · 區(qū)間求和的樹狀數(shù)組經(jīng)典應(yīng)用

到了這里,關(guān)于LeetCode 雙周賽 106(2023/06/10)兩道思維題的文章就介紹完了。如果您還想了解更多內(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)文章

  • [LeetCode周賽復(fù)盤] 第 102 場(chǎng)雙周賽20230415

    [LeetCode周賽復(fù)盤] 第 102 場(chǎng)雙周賽20230415

    T4卡了半小時(shí),真的不應(yīng)該。 T1 模擬。 T2 前綴和模擬。 T3 分層遍歷。 T4 floyd/dij(我覺得dij不是正解)。 鏈接: 6333. 查詢網(wǎng)格圖中每一列的寬度 1. 題目描述 2. 思路分析 按題意模擬即可。 3. 代碼實(shí)現(xiàn) 鏈接: 6334. 一個(gè)數(shù)組所有前綴的分?jǐn)?shù) 1. 題目描述 2. 思路分析 不要被題目的一堆

    2023年04月16日
    瀏覽(25)
  • 第 107 場(chǎng)LeetCode雙周賽

    第 107 場(chǎng)LeetCode雙周賽

    A 最大字符串配對(duì)數(shù)目 顯然各字符串對(duì) 間匹配的先后順序不影響最大匹配數(shù)目, 可以從后往前遍歷數(shù)組, 判斷前面是否有和當(dāng)前末尾構(gòu)成匹配的. B 構(gòu)造最長(zhǎng)的新字符串 記憶化搜索: 定義狀態(tài) p a a , b b , a b , l a s t p_{aa,bb,ab,last} p aa , bb , ab , l a s t ? 為剩余三種字符串分別為aa、

    2024年02月11日
    瀏覽(22)
  • leetcode第124場(chǎng)雙周賽

    給你一個(gè)整數(shù)數(shù)組? nums ?,如果? nums ? 至少 ?包含? 2 ?個(gè)元素,你可以執(zhí)行以下操作: 選擇? nums ?中的前兩個(gè)元素并將它們刪除。 一次操作的? 分?jǐn)?shù) ?是被刪除元素的和。 在確保 ?所有操作分?jǐn)?shù)相同 ?的前提下,請(qǐng)你求出? 最多 ?能進(jìn)行多少次操作。 請(qǐng)你返回按照上述

    2024年02月19日
    瀏覽(17)
  • LeetCode---121雙周賽---數(shù)位dp

    LeetCode---121雙周賽---數(shù)位dp

    2996. 大于等于順序前綴和的最小缺失整數(shù) 2997. 使數(shù)組異或和等于 K 的最少操作次數(shù) 2998. 使 X 和 Y 相等的最少操作次數(shù) 2999. 統(tǒng)計(jì)強(qiáng)大整數(shù)的數(shù)目 簡(jiǎn)單的模擬題,只要按照題目的要求去寫代碼即可,代碼如下 這題考異或的性質(zhì)---相同為0,相異為1,我們只要關(guān)心nums的異或和與

    2024年01月22日
    瀏覽(20)
  • leetcode 122雙周賽 解題思路+代碼

    本人水平有限,只做出3道,最后1道放棄。 給你一個(gè)長(zhǎng)度為 n 的整數(shù)數(shù)組 nums 。 一個(gè)數(shù)組的 代價(jià) 是它的 第一個(gè) 元素。比方說,[1,2,3] 的代價(jià)是 1 ,[3,4,1] 的代價(jià)是 3 。 你需要將 nums 分成 3 個(gè) 連續(xù)且沒有交集 的子數(shù)組。 請(qǐng)你返回這些子數(shù)組的 最小 代價(jià) 總和 。 示例 1: 輸

    2024年02月20日
    瀏覽(20)
  • [LeetCode108雙周賽&LeetCode353周賽] 學(xué)習(xí)用記憶化搜索解決 DP 問題

    參考靈神直播和代碼 @cache 裝飾器的作用:將傳入不同參數(shù)得到的函數(shù)值存儲(chǔ)到緩存,避免下次傳遞相同參數(shù)重復(fù)計(jì)算結(jié)果,可用于解決遞歸函數(shù)重復(fù)計(jì)算問題,比如遞歸求斐波那契問題。 https://leetcode.cn/problems/maximum-number-of-jumps-to-reach-the-last-index/ 記憶化搜索 dfs(i) 表示以

    2024年02月13日
    瀏覽(24)
  • 第 122 場(chǎng) LeetCode 雙周賽題解

    第 122 場(chǎng) LeetCode 雙周賽題解

    A 將數(shù)組分成最小總代價(jià)的子數(shù)組 I 枚舉:枚舉后兩個(gè)子數(shù)組的起始下標(biāo) B 判斷一個(gè)數(shù)組是否可以變?yōu)橛行?模擬:模擬冒泡排序的過程,若相鄰元素大小關(guān)系需要交換位置,但其二進(jìn)制下數(shù)位為 1 的數(shù)目不同,則返回false,若完成排序返回true C 通過操作使數(shù)組長(zhǎng)度最小 腦筋急

    2024年01月22日
    瀏覽(24)
  • LeetCode 雙周賽 101,DP/中心位貪心/裴蜀定理/Dijkstra/最小環(huán)

    本文已收錄到 AndroidFamily,技術(shù)和職場(chǎng)問題,請(qǐng)關(guān)注公眾號(hào) [彭旭銳] 提問。 大家好,我是小彭。 這周比較忙,上周末的雙周賽題解現(xiàn)在才更新,雖遲但到哈。上周末這場(chǎng)是 LeetCode 第 101 場(chǎng)雙周賽,整體有點(diǎn)難度,第 3 題似乎比第 4 題還難一些。 2605.?從兩個(gè)數(shù)字?jǐn)?shù)組里生成最

    2023年04月09日
    瀏覽(18)
  • Leetcode 第 108 場(chǎng)雙周賽 Problem C 將字符串分割為最少的美麗子字符串(動(dòng)態(tài)規(guī)劃)

    Leetcode 第 108 場(chǎng)雙周賽 Problem C 將字符串分割為最少的美麗子字符串(動(dòng)態(tài)規(guī)劃) 題目 給你一個(gè)二進(jìn)制字符串 s ,你需要將字符串分割成一個(gè)或者多個(gè) 子字符串 ,使每個(gè)子字符串都是 美麗 的。 如果一個(gè)字符串滿足以下條件,我們稱它是 美麗 的: 它不包含前導(dǎo) 0 。 它是

    2024年02月15日
    瀏覽(23)
  • Leetcode周賽 | 2023-7-23

    Leetcode周賽 | 2023-7-23

    01背包啊。01背包?。≡趺茨芤恢蓖厮萆舷?!還是對(duì)動(dòng)態(tài)規(guī)劃太不熟悉了!這不就是01背包嗎?還要?jiǎng)e人提示才知道。 哈希,用雙指針應(yīng)該也可以。 也是動(dòng)態(tài)規(guī)劃?。≡趺茨苡窒牖厮?!這道題如果兩層遍歷會(huì)超時(shí),要保存前面遍歷過的,當(dāng)前點(diǎn)為奇數(shù)的最大值,和當(dāng)前點(diǎn)為

    2024年02月16日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包