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

【LeetCode每日一題合集】2023.8.28-2023.9.3(到家的最少跳躍次數(shù))

這篇具有很好參考價(jià)值的文章主要介紹了【LeetCode每日一題合集】2023.8.28-2023.9.3(到家的最少跳躍次數(shù))。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

57. 插入?yún)^(qū)間

https://leetcode.cn/problems/insert-interval/
【LeetCode每日一題合集】2023.8.28-2023.9.3(到家的最少跳躍次數(shù)),算法刷題記錄,leetcode,算法,BFS,每日一題
提示:
0 <= intervals.length <= 10^4
intervals[i].length == 2
0 <= intervals[i][0] <= intervals[i][1] <= 10^5
intervals 根據(jù) intervals[i][0] 按 升序 排列
newInterval.length == 2
0 <= newInterval[0] <= newInterval[1] <= 10^5

當(dāng)前區(qū)間與要加入的新區(qū)間之間的關(guān)系只有兩種可能:相交或者不相交。

如果相交,將兩者結(jié)合即可。
如果不相交,判斷新加入的區(qū)間是否在當(dāng)前區(qū)間之前,如果是,就先加入答案。

遍歷一遍之后,如果沒有處理過新加入的區(qū)間,就說明新區(qū)間應(yīng)該加在最后。

class Solution {
    public int[][] insert(int[][] intervals, int[] newInterval) {
        if (intervals.length == 0) return new int[][]{newInterval};
        List<int[]> ans = new ArrayList<>();
        int s = newInterval[0], e = newInterval[1];
        boolean f = false;
        for (int[] interval: intervals) {
            int a = interval[0], b = interval[1];
            // 和 newInterval 相交
            if (b >= s && a <= e) {
                f = true;
                a = Math.min(a, s);
                b = Math.max(b, e);
            }

            // 不相交 newInterval 在此區(qū)間之前
            if (a > e) {
                 if (ans.size() == 0 || ans.get(ans.size() - 1)[1] < s) {
                    ans.add(newInterval);
                    f = true;
                }
            }

            if (ans.size() == 0 || ans.get(ans.size() - 1)[1] < a) ans.add(new int[]{a, b});
            else ans.get(ans.size() - 1)[1] = b;
        }
        // 如果沒有處理過 newInterval
        if (!f) ans.add(newInterval);
        return ans.toArray(new int[ans.size()][2]);
    }
}

823. 帶因子的二叉樹

https://leetcode.cn/problems/binary-trees-with-factors/
【LeetCode每日一題合集】2023.8.28-2023.9.3(到家的最少跳躍次數(shù)),算法刷題記錄,leetcode,算法,BFS,每日一題
提示:
1 <= arr.length <= 1000
2 <= arr[i] <= 10^9
arr 中的所有值 互不相同

解法——遞推

將元素排序之后,從小到大依次處理各個(gè)數(shù)值作為根節(jié)點(diǎn)時(shí)的二叉樹數(shù)量。

class Solution {
    final long MOD = (long)1e9 + 7;

    public int numFactoredBinaryTrees(int[] arr) {
        Arrays.sort(arr);
        int n = arr.length;
        long ans = 0;
        Map<Integer, Long> m = new HashMap<>();         // 存儲(chǔ)每個(gè)數(shù)字作為根節(jié)點(diǎn)時(shí)的二叉樹數(shù)量
        for (int i = 0; i < n; ++i) {
            long cnt = 1;
            for (int j = 0; j < i; ++j) {               // 枚舉兒子節(jié)點(diǎn)
                if (arr[i] % arr[j] == 0 && m.containsKey(arr[i] / arr[j])) {
                    cnt = (cnt + m.get(arr[j]) * m.get(arr[i] / arr[j])) % MOD;
                }
            }
            ans = (ans + cnt) % MOD;
            m.put(arr[i], cnt);
        }
        return (int)ans;
    }
}

1654. 到家的最少跳躍次數(shù)(BFS,??最遠(yuǎn)距離上界的證明)

https://leetcode.cn/problems/minimum-jumps-to-reach-home/description/
【LeetCode每日一題合集】2023.8.28-2023.9.3(到家的最少跳躍次數(shù)),算法刷題記錄,leetcode,算法,BFS,每日一題

提示:
1 <= forbidden.length <= 1000
1 <= a, b, forbidden[i] <= 2000
0 <= x <= 2000
forbidden 中所有位置互不相同。
位置 x 不在 forbidden 中。

可以證明,一定可以在[0, max(f + a + b, x + b)] 的下標(biāo)范圍內(nèi)找到最優(yōu)解,其中 f 是最遠(yuǎn)進(jìn)制點(diǎn)的坐標(biāo)。
因?yàn)?f, a, b, x <= 2000,故搜索范圍不會(huì)超過 6000。(證明略,我也沒整明白)

用 bfs 計(jì)算最短路。

class Solution {
    public int minimumJumps(int[] forbidden, int a, int b, int x) {
        Set<Integer> s = new HashSet<>();
        for (int v: forbidden) s.add(v);
        Deque<int[]> q = new ArrayDeque<>();
        q.offer(new int[]{0, 1});       // 將起點(diǎn)放入隊(duì)列
        final int N = 6000;
        boolean[][] vis = new boolean[N][2];
        vis[0][1] = true;
        for (int ans = 0; !q.isEmpty(); ++ans) {
            for (int t = q.size(); t > 0; --t) {
                int[] p = q.poll();
                int i = p[0], k = p[1];
                // 到達(dá)了目的地,直接返回答案
                if (i == x) return ans;

                List<int[]> nxt = new ArrayList<>();
                nxt.add(new int[]{i + a, 1});
                // 如果上一步 不是向后跳,那么這一步可以向后跳
                if ((k & 1) == 1) nxt.add(new int[]{i - b, 0});
                for (int[] e: nxt) {
                    int j = e[0];
                    k = e[1];
                    if (j >= 0 && j < N && !s.contains(j) && !vis[j][k]) {
                        q.offer(new int[]{j, k});
                        vis[j][k] = true;
                    }
                }
            }
        }
        return -1;
    }
}

1761. 一個(gè)圖中連通三元組的最小度數(shù)

https://leetcode.cn/problems/minimum-degree-of-a-connected-trio-in-a-graph/

【LeetCode每日一題合集】2023.8.28-2023.9.3(到家的最少跳躍次數(shù)),算法刷題記錄,leetcode,算法,BFS,每日一題

提示:
2 <= n <= 400
edges[i].length == 2
1 <= edges.length <= n * (n-1) / 2
1 <= ui, vi <= n
ui != vi
圖中沒有重復(fù)的邊。

構(gòu)造鄰接表,枚舉每一個(gè)三元組。

class Solution {
    public int minTrioDegree(int n, int[][] edges) {
        int[] cnt = new int[n + 1];
        int[][] isC = new int[n + 1][n + 1];
        for (int[] edge: edges) {
            int x = edge[0], y = edge[1];
            isC[x][y] = 1;
            isC[y][x] = 1;
            cnt[x]++;
            cnt[y]++;
        }
        int ans = Integer.MAX_VALUE;
        for (int i = 1; i <= n; ++i) {
            for (int j = i + 1; j <= n; ++j) {
                if (isC[i][j] == 0) continue;
                for (int k = j + 1; k <= n; ++k) {
                    if (isC[j][k] == 0 || isC[i][k] == 0) continue;
                    ans = Math.min(ans, cnt[i] + cnt[j] + cnt[k] - 6);
                }
            }
        }
        return ans != Integer.MAX_VALUE? ans: -1;
    }
}

2240. 買鋼筆和鉛筆的方案數(shù)

https://leetcode.cn/problems/number-of-ways-to-buy-pens-and-pencils/

【LeetCode每日一題合集】2023.8.28-2023.9.3(到家的最少跳躍次數(shù)),算法刷題記錄,leetcode,算法,BFS,每日一題

提示:
1 <= total, cost1, cost2 <= 10^6

解法1——完全背包

套用完全背包模板,對(duì)dp數(shù)組求和即可。

class Solution {
    public long waysToBuyPensPencils(int total, int cost1, int cost2) {
        long[] dp = new long[total + 1];
        dp[0] = 1;
        for (int j = cost1; j <= total; ++j) dp[j] += dp[j - cost1];
        for (int j = cost2; j <= total; ++j) dp[j] += dp[j - cost2];
        long ans = 0;
        for (long d: dp) ans += d;
        return ans;
    }
}

解法2——枚舉買了幾支鋼筆(推薦解法)

通過枚舉購買鋼筆的數(shù)量,計(jì)算此時(shí)可以購買鉛筆的數(shù)量,+1即是購買此時(shí)數(shù)量鋼筆時(shí),購買鉛筆的方案數(shù)。

class Solution {
    public long waysToBuyPensPencils(int total, int cost1, int cost2) {
        long ans = 0;
        for (int i = 0; i * cost1 <= total; ++i) {
            ans += (total - i * cost1) / cost2 + 1;
        }
        return ans;
    }
}

2511. 最多可以摧毀的敵人城堡數(shù)目

https://leetcode.cn/problems/maximum-enemy-forts-that-can-be-captured/?envType=daily-question&envId=2023-09-02

【LeetCode每日一題合集】2023.8.28-2023.9.3(到家的最少跳躍次數(shù)),算法刷題記錄,leetcode,算法,BFS,每日一題

提示:
1 <= forts.length <= 1000
-1 <= forts[i] <= 1

解法——一次遍歷

題目要求是計(jì)算 1 和 -1 之間的 0 的最大數(shù)量。

一次遍歷,遍歷的過程中記錄上一個(gè) 1 或 -1 出現(xiàn)的位置即可。

class Solution {
    public int captureForts(int[] forts) {
        int lastId = 0, ans = 0;
        for (int i = 0; i < forts.length; ++i) {
            if (forts[i] == -1 || forts[i] == 1) {
                if (forts[i] + forts[lastId] == 0) ans = Math.max(ans, i - lastId - 1);
                lastId = i;
            }
        }
        return ans;
    }
}

1921. 消滅怪物的最大數(shù)量(貪心)

https://leetcode.cn/problems/eliminate-maximum-number-of-monsters/

【LeetCode每日一題合集】2023.8.28-2023.9.3(到家的最少跳躍次數(shù)),算法刷題記錄,leetcode,算法,BFS,每日一題

提示:
n == dist.length == speed.length
1 <= n <= 10^5
1 <= dist[i], speed[i] <= 10^5

先計(jì)算時(shí)間,再按時(shí)間排序。
貪心的先消滅快要到達(dá)城市的怪獸。文章來源地址http://www.zghlxwxcb.cn/news/detail-701176.html

class Solution {
    public int eliminateMaximum(int[] dist, int[] speed) {
        int n = dist.length;
        int[] t = new int[n];
        for (int i = 0; i < n; ++i) {
            t[i] = (dist[i] + speed[i] - 1) / speed[i]; // 向上取整
        }
        Arrays.sort(t);
        for (int i = 0; i < n; ++i) {
            if (t[i] <= i) return i;
        }
        return n;
    }
}

到了這里,關(guān)于【LeetCode每日一題合集】2023.8.28-2023.9.3(到家的最少跳躍次數(shù))的文章就介紹完了。如果您還想了解更多內(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)文章

  • 2023-08-28 LeetCode每日一題(插入?yún)^(qū)間)

    2023-08-28 LeetCode每日一題(插入?yún)^(qū)間)

    點(diǎn)擊跳轉(zhuǎn)到題目位置 給你一個(gè) 無重疊的 ,按照區(qū)間起始端點(diǎn)排序的區(qū)間列表。 在列表中插入一個(gè)新的區(qū)間,你需要確保列表中的區(qū)間仍然有序且不重疊(如果有必要的話,可以合并區(qū)間)。 示例 1: 示例 2: 示例 3: 示例 4: 示例 5: 提示: 0 = intervals.length = 10 4 interval

    2024年02月11日
    瀏覽(28)
  • 2023-07-28 LeetCode每日一題(并行課程 III)

    2023-07-28 LeetCode每日一題(并行課程 III)

    點(diǎn)擊跳轉(zhuǎn)到題目位置 給你一個(gè)整數(shù) n ,表示有 n 節(jié)課,課程編號(hào)從 1 到 n 。同時(shí)給你一個(gè)二維整數(shù)數(shù)組 relations ,其中 relations[j] = [prevCourse j , nextCourse j ] ,表示課程 prevCoursej 必須在課程 nextCourse j 之前 完成(先修課的關(guān)系)。同時(shí)給你一個(gè)下標(biāo)從 0 開始的整數(shù)數(shù)組 time ,其

    2024年02月15日
    瀏覽(22)
  • 【LeetCode每日一題合集】2023.7.3-2023.7.9

    【LeetCode每日一題合集】2023.7.3-2023.7.9

    445. 兩數(shù)相加 II 這道題目考察的實(shí)際知識(shí)點(diǎn)是高精度加法。更多關(guān)于高精度計(jì)算的內(nèi)容參見:【算法基礎(chǔ)】1.4 高精度(模擬大數(shù)運(yùn)算:整數(shù)加減乘除) 2679. 矩陣中的和 讀懂題意,每次操作會(huì)刪去每一行中的當(dāng)前最大值,同時(shí)將這些行最大值中的最大值加入最后的分?jǐn)?shù)。 為了

    2024年02月13日
    瀏覽(19)
  • 【LeetCode - 每日一題】2594. 修車的最少時(shí)間(23.09.07)

    【LeetCode - 每日一題】2594. 修車的最少時(shí)間(23.09.07)

    給定每個(gè)師傅修車的時(shí)間和需要修的車輛總數(shù),計(jì)算修理所有汽車需要的最少時(shí)間。 師傅可以同時(shí)修車。 看到題目沒有任何頭緒,直接查看題解。 至于為什么用二分做呢,討論區(qū)有個(gè)友友這么說到: 對(duì)于修理時(shí)間 t t t 來說: 若 t t t 時(shí)間內(nèi)可以修理完所有車,則大于等于

    2024年02月09日
    瀏覽(20)
  • leetcode每日一題——45.跳躍游戲II(面試經(jīng)典150題)

    45. 跳躍游戲 II - 力扣(LeetCode) 給定一個(gè)長(zhǎng)度為 n 的 0 索引 整數(shù)數(shù)組 nums。 初始位置為 nums[0] 。 每個(gè)元素 nums[i] 表示從索引 i 向前跳轉(zhuǎn)的最大長(zhǎng)度。換句話說,如果你在 nums[i] 處,你可以跳轉(zhuǎn)到任意 nums[i + j] 處:? ?0 = j = nums[i]? ? ?i + j n 返回到達(dá)?nums[n - 1] 的最小跳躍次數(shù)

    2024年02月13日
    瀏覽(26)
  • 每日一題leetcode--使循環(huán)數(shù)組所有元素相等的最少秒數(shù)

    每日一題leetcode--使循環(huán)數(shù)組所有元素相等的最少秒數(shù)

    相當(dāng)于擴(kuò)散,每個(gè)數(shù)可以一次可以擴(kuò)散到左右讓其一樣,問最少多少次可以讓整個(gè)數(shù)組都變成一樣的數(shù) 使用枚舉,先將所有信息存到hash表中,然后逐一進(jìn)行枚舉,計(jì)算時(shí)間長(zhǎng)短用看下圖 ?考慮到環(huán)形數(shù)組,可以把首項(xiàng)+n放到最后,這樣for循環(huán)就相當(dāng)于前后可以聯(lián)通 貼一張別

    2024年02月12日
    瀏覽(22)
  • 【LeetCode每日一題】2809. 使數(shù)組和小于等于 x 的最少時(shí)間

    【LeetCode每日一題】2809. 使數(shù)組和小于等于 x 的最少時(shí)間

    2024-1-19 2809. 使數(shù)組和小于等于 x 的最少時(shí)間 思路: 獲取兩個(gè)列表的長(zhǎng)度n,并初始化一個(gè)二維數(shù)組f,用于存儲(chǔ)最優(yōu)解。 定義一個(gè)二維數(shù)組nums,用于存儲(chǔ)輸入的兩個(gè)列表中的元素,并按照第二列元素進(jìn)行排序。 使用動(dòng)態(tài)規(guī)劃的方法,通過遍歷nums數(shù)組,計(jì)算最優(yōu)解。其中,

    2024年01月21日
    瀏覽(25)
  • 【力扣每日一題】2023.8.28 插入?yún)^(qū)間

    【力扣每日一題】2023.8.28 插入?yún)^(qū)間

    目錄 題目: 示例: 分析: 代碼: 和昨天的題大差不差,我們?nèi)匀皇怯幸欢褏^(qū)間,題目給我們一個(gè)新的區(qū)間,要我們把新區(qū)間插入到原本的區(qū)間數(shù)組里,并且能合并的要合并。 我們可以直接把新區(qū)間放入數(shù)組里,接著執(zhí)行昨天的代碼即可,一行都不用改,甚至形參名字都是

    2024年02月10日
    瀏覽(25)
  • 【LeetCode每日一題】2645. 構(gòu)造有效字符串的最少插入數(shù)(計(jì)算組數(shù)+動(dòng)態(tài)規(guī)劃+考慮相鄰字母)

    【LeetCode每日一題】2645. 構(gòu)造有效字符串的最少插入數(shù)(計(jì)算組數(shù)+動(dòng)態(tài)規(guī)劃+考慮相鄰字母)

    2024-1-11 2645. 構(gòu)造有效字符串的最少插入數(shù) 方法一:計(jì)算組數(shù) 1.用count統(tǒng)計(jì),能構(gòu)成幾組abc 2.如果當(dāng)前字符大于之前字符,說明還在組內(nèi),不更新 3.如果當(dāng)前字符小于等于之前字符,說明不是同一組的abc,組數(shù)更新 4.最終返回值:組數(shù)*3,再減去原本的字符數(shù),就是要插入的次數(shù)

    2024年01月17日
    瀏覽(23)
  • LeetCode 每日一題 2023/7/24-2023/7/30

    記錄了初步解題思路 以及本地實(shí)現(xiàn)代碼;并不一定為最優(yōu) 也希望大家能一起探討 一起進(jìn)步 7/24 771. 寶石與石頭 將寶石類型放入set中 一次判斷石頭中寶石個(gè)數(shù) 7/25 2208. 將數(shù)組和減半的最少操作次數(shù) 大頂堆記錄當(dāng)前最大值 每次取最大值減半 7/26 2569. 更新數(shù)組后處理求和查詢

    2024年02月15日
    瀏覽(45)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包