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

leetcode解題思路分析(一百四十八)1289 - 1296 題

這篇具有很好參考價(jià)值的文章主要介紹了leetcode解題思路分析(一百四十八)1289 - 1296 題。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

  1. 下降路徑最小和 II
    給你一個(gè) n x n 整數(shù)矩陣 grid ,請(qǐng)你返回 非零偏移下降路徑 數(shù)字和的最小值。非零偏移下降路徑 定義為:從 grid 數(shù)組中的每一行選擇一個(gè)數(shù)字,且按順序選出來(lái)的數(shù)字中,相鄰數(shù)字不在原數(shù)組的同一列。

f[i][j] 表示從數(shù)組的前i行中的每一行選擇一個(gè)數(shù)字,并且第 i 行選擇的數(shù)字為 grid[i][j]時(shí),可以得到的路徑和最小值

class Solution {
public:
    int minFallingPathSum(vector<vector<int>>& grid) {
        int n = grid.size();
        vector<vector<int>> d(n, vector<int>(n, INT_MAX));
        for (int i = 0; i < n; i++) {
            d[0][i] = grid[0][i];
        }
        for (int i = 1; i < n; i++) {
            for (int j = 0; j < n; j++) {
                for (int k = 0; k < n; k++) {
                    if (j == k) {
                        continue;
                    }
                    d[i][j] = min(d[i][j], d[i - 1][k] + grid[i][j]);
                }
            }
        }
        int res = INT_MAX;
        for (int j = 0; j < n; j++) {
            res = min(res, d[n - 1][j]);
        }
        return res;
    }
};


  1. 二進(jìn)制鏈表轉(zhuǎn)整數(shù)
    給你一個(gè)單鏈表的引用結(jié)點(diǎn) head。鏈表中每個(gè)結(jié)點(diǎn)的值不是 0 就是 1。已知此鏈表是一個(gè)整數(shù)數(shù)字的二進(jìn)制表示形式。請(qǐng)你返回該鏈表所表示數(shù)字的 十進(jìn)制值 。

按位操作即可。

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */
class Solution {
public:
    int getDecimalValue(ListNode* head) {
        int n = 0;
        while (head)
        {
            n = n << 1 | head->val;
            head = head->next;
        }
        return n;
    }
};
  1. 順次數(shù)
    我們定義「順次數(shù)」為:每一位上的數(shù)字都比前一位上的數(shù)字大 1 的整數(shù)。請(qǐng)你返回由 [low, high] 范圍內(nèi)所有順次數(shù)組成的 有序 列表(從小到大排序)。

外層循環(huán)定第一位數(shù)字,內(nèi)層循環(huán)遍歷所有可能性,枚舉就完事。

class Solution {
public:
    vector<int> sequentialDigits(int low, int high) {
        vector<int> ans;
        for (int i = 1; i <= 9; ++i) {
            int num = i;
            for (int j = i + 1; j <= 9; ++j) {
                num = num * 10 + j;
                if (num >= low && num <= high) {
                    ans.push_back(num);
                }
            }
        }
        sort(ans.begin(), ans.end());
        return ans;
    }
};


  1. 元素和小于等于閾值的正方形的最大邊長(zhǎng)
    給你一個(gè)大小為 m x n 的矩陣 mat 和一個(gè)整數(shù)閾值 threshold。請(qǐng)你返回元素總和小于或等于閾值的正方形區(qū)域的最大邊長(zhǎng);如果沒(méi)有這樣的正方形區(qū)域,則返回 0 。

要點(diǎn)主要有:1.二位前綴和;2.三種循環(huán)遍歷查找;3. 三種循環(huán)的兩個(gè)優(yōu)化:找到了大小為n的,后面直接n+1找起/如果c都不行,后面就不用看了直接跳過(guò)當(dāng)前循環(huán)。

class Solution {
public:
    int getRect(const vector<vector<int>>& P, int x1, int y1, int x2, int y2) {
        return P[x2][y2] - P[x1 - 1][y2] - P[x2][y1 - 1] + P[x1 - 1][y1 - 1];
    }

    int maxSideLength(vector<vector<int>>& mat, int threshold) {
        int m = mat.size(), n = mat[0].size();
        vector<vector<int>> P(m + 1, vector<int>(n + 1));
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                P[i][j] = P[i - 1][j] + P[i][j - 1] - P[i - 1][j - 1] + mat[i - 1][j - 1];
            }
        }

        int r = min(m, n), ans = 0;
        for (int i = 1; i <= m; ++i) {
            for (int j = 1; j <= n; ++j) {
                for (int c = ans + 1; c <= r; ++c) {
                    if (i + c - 1 <= m && j + c - 1 <= n && getRect(P, i, j, i + c - 1, j + c - 1) <= threshold) {
                        ++ans;
                    }
                    else {
                        break;
                    }
                }
            }
        }
        return ans;
    }
};


  1. 網(wǎng)格中的最短路徑
    給你一個(gè) m * n 的網(wǎng)格,其中每個(gè)單元格不是 0(空)就是 1(障礙物)。每一步,您都可以在空白單元格中上、下、左、右移動(dòng)。如果您 最多 可以消除 k 個(gè)障礙物,請(qǐng)找出從左上角 (0, 0) 到右下角 (m-1, n-1) 的最短路徑,并返回通過(guò)該路徑所需的步數(shù)。如果找不到這樣的路徑,則返回 -1 。

廣度優(yōu)先搜索 + 隊(duì)列

struct Nagato {
    int x, y;
    int rest;
    Nagato(int _x, int _y, int _r): x(_x), y(_y), rest(_r) {}
};

class Solution {
private:
    static constexpr int dirs[4][2] = {{-1, 0}, {1, 0}, {0, -1}, {0, 1}};

public:
    int shortestPath(vector<vector<int>>& grid, int k) {
        int m = grid.size(), n = grid[0].size();
        if (m == 1 && n == 1) {
            return 0;
        }

        k = min(k, m + n - 3);
        bool visited[m][n][k + 1];
        memset(visited, false, sizeof(visited));
        queue<Nagato> q;
        q.emplace(0, 0, k);
        visited[0][0][k] = true;

        for (int step = 1; q.size() > 0; ++step) {
            int cnt = q.size();
            for (int _ = 0; _ < cnt; ++_) {
                Nagato cur = q.front();
                q.pop();
                for (int i = 0; i < 4; ++i) {
                    int nx = cur.x + dirs[i][0];
                    int ny = cur.y + dirs[i][1];
                    if (nx >= 0 && nx < m && ny >= 0 && ny < n) {
                        if (grid[nx][ny] == 0 && !visited[nx][ny][cur.rest]) {
                            if (nx == m - 1 && ny == n - 1) {
                                return step;
                            }
                            q.emplace(nx, ny, cur.rest);
                            visited[nx][ny][cur.rest] = true;
                        }
                        else if (grid[nx][ny] == 1 && cur.rest > 0 && !visited[nx][ny][cur.rest - 1]) {
                            q.emplace(nx, ny, cur.rest - 1);
                            visited[nx][ny][cur.rest - 1] = true;
                        }
                    }
                }
            }
        }
        return -1;
    }
};


  1. 統(tǒng)計(jì)位數(shù)為偶數(shù)的數(shù)字
    給你一個(gè)整數(shù)數(shù)組 nums,請(qǐng)你返回其中位數(shù)為 偶數(shù) 的數(shù)字的個(gè)數(shù)。

轉(zhuǎn)化成string取長(zhǎng)度,或者直接對(duì)數(shù)看奇偶。

class Solution {
public:
    int findNumbers(vector<int>& nums) {
        int ans = 0;
        for (int num: nums) {
            if ((int)(log10(num) + 1) % 2 == 0) {
                ++ans;
            }
        }
        return ans;
    }
};

  1. 劃分?jǐn)?shù)組為連續(xù)數(shù)字的集合
    給你一個(gè)整數(shù)數(shù)組 nums 和一個(gè)正整數(shù) k,請(qǐng)你判斷是否可以把這個(gè)數(shù)組劃分成一些由 k 個(gè)連續(xù)數(shù)字組成的集合。
    如果可以,請(qǐng)返回 true;否則,返回 false。

貪心算法:排序后依次遍歷。用一個(gè)哈希表存儲(chǔ)元素及其次數(shù),每次用到了就–。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-705850.html

class Solution {
public:
    bool isPossibleDivide(vector<int>& nums, int k) {
        int n = nums.size();
        if (n % k != 0) {
            return false;
        }
        sort(nums.begin(), nums.end());
        unordered_map<int, int> cnt;
        for (auto & num : nums) {
            cnt[num]++;
        }
        for (auto & x : nums) {
            if (!cnt.count(x)) {
                continue;
            }
            for (int j = 0; j < k; j++) {
                int num = x + j;
                if (!cnt.count(num)) {
                    return false;
                }
                cnt[num]--;
                if (cnt[num] == 0) {
                    cnt.erase(num);
                }
            }
        }
        return true;
    }
};


到了這里,關(guān)于leetcode解題思路分析(一百四十八)1289 - 1296 題的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(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)文章

  • 一百四十三、Linux——Linux的CentOS 7系統(tǒng)語(yǔ)言由中文改成英文

    一百四十三、Linux——Linux的CentOS 7系統(tǒng)語(yǔ)言由中文改成英文

    之前安裝CentOS 7系統(tǒng)的時(shí)候把語(yǔ)言設(shè)置成中文,結(jié)果Linux文件夾命名出現(xiàn)中文亂碼的問(wèn)題,于是決定把Linux系統(tǒng)語(yǔ)言由中文改成英文 # cd /etc/ # ls # vi locale.conf 就是把原先的LANG=\\\" zh_CN .UTF-8\\\"修改為L(zhǎng)ANG=\\\" en_US .UTF-8\\\"? 修改好后:wq保存并退出配置文件locale.conf # reboot ?然后在上方頁(yè)面

    2024年02月14日
    瀏覽(17)
  • 一百四十六、Xmanager——Xmanager5連接X(jué)shell7并控制服務(wù)器桌面

    一百四十六、Xmanager——Xmanager5連接X(jué)shell7并控制服務(wù)器桌面

    由于kettle安裝在Linux上,Xshell啟動(dòng)后需要Xmanager。而Xmanager7版本受限、沒(méi)有免費(fèi)版,所以就用Xmanager5去連接X(jué)shell7 注冊(cè)碼 :101210-450789-147200 Xmanager 下載 - NetSarang Website CentOS 7?GNOME桌面環(huán)境 [root@hurys22 ~]# yum install epel-release -y [root@hurys22 ~]# yum install lightdm -y [root@hurys22 ~]# yum groupi

    2024年02月14日
    瀏覽(28)
  • 一百四十七、Kettle——Linux上安裝的kettle8.2連接ClickHouse數(shù)據(jù)庫(kù)

    一百四十七、Kettle——Linux上安裝的kettle8.2連接ClickHouse數(shù)據(jù)庫(kù)

    kettle8.2在Linux安裝好后,需要與ClickHouse數(shù)據(jù)庫(kù)建立連接 https://pan.baidu.com/s/1iqGyXsTaQSCHEbjj7yX7AA?提取碼: mvzd ? 注意 : clickhouse-plugins文件里就是自定義的驅(qū)動(dòng)jar包 注意: 要知道Linux系統(tǒng)架構(gòu)是64位還是32位, 它們所屬的Linux文件夾不同 到這里,Linux安裝的kettle8.2就可以與ClickHou

    2024年02月13日
    瀏覽(27)
  • 一起Talk Android吧(第五百四十八回:如何創(chuàng)建垂直版SeekBar)

    一起Talk Android吧(第五百四十八回:如何創(chuàng)建垂直版SeekBar)

    各位看官們大家好,上一回中咱們說(shuō)的例子是\\\"藍(lán)牙廣播中的廠商數(shù)據(jù)\\\",本章回中介紹的例子是\\\" 如何創(chuàng)建垂直版SeekBar \\\"。閑話休提,言歸正轉(zhuǎn),讓我們一起Talk Android吧! 看官們,我們?cè)谶@里說(shuō)的 SeekBar 就是滑動(dòng)條,如果有看官忘記的話,可以查看之前的博客。 SeekBar 在默認(rèn)情

    2024年02月11日
    瀏覽(22)
  • 一百四十一、Kettle——kettle8.2在Windows本地開(kāi)啟carte服務(wù)以及配置子服務(wù)器

    一百四十一、Kettle——kettle8.2在Windows本地開(kāi)啟carte服務(wù)以及配置子服務(wù)器

    在kettle建好共享資源庫(kù)后,為了給在服務(wù)器上部署kettle的carte服務(wù)躺雷,先在Windows本地測(cè)試一下怎么玩carte服務(wù) kettle版本是8.2? ? ? ? ? ? ?pdi-ce-8.2.0.0-342 ? ? kettle本地安裝路徑是D:javakettlepdi-ce-8.2.0.0-342 Carte是Kettle自帶的調(diào)度及監(jiān)控工具,是一種內(nèi)置的輕量級(jí)的web服務(wù),支

    2024年02月10日
    瀏覽(24)
  • 一百四十九、Kettle——Linux上安裝的kettle8.2創(chuàng)建共享資源庫(kù)時(shí)遇到的問(wèn)題(持續(xù)更新中)

    一百四十九、Kettle——Linux上安裝的kettle8.2創(chuàng)建共享資源庫(kù)時(shí)遇到的問(wèn)題(持續(xù)更新中)

    在kettle8.2在Linux上安裝好可以啟動(dòng)界面、并且可以連接MySQL、Hive、ClickHouse等數(shù)據(jù)庫(kù)后開(kāi)始創(chuàng)建共享資源庫(kù),但是遇到了一些問(wèn)題 1、報(bào)錯(cuò)詳情 2023/08/10 13:57:21 - Spoon - Caused by: java.lang.UnsatisfiedLinkError: Could not load SWT library. Reasons:? 2023/08/10 13:57:21 - Spoon - ?? ?no swt-mozilla-gtk-4335 i

    2024年02月13日
    瀏覽(18)
  • npm與node版本不匹配問(wèn)題解決思路(一百五十八)

    npm與node版本不匹配問(wèn)題解決思路(一百五十八)

    1.報(bào)錯(cuò) npm WARN EBADENGINE Unsupported engine { npm WARN EBADENGINE package: ‘electron-packager@17.1.1’, npm WARN EBADENGINE required: { node: ‘= 14.17.5’ }, npm WARN EBADENGINE current: { node: ‘v12.22.9’, npm: ‘8.5.1’ } npm WARN EBADENGINE } npm WARN EBADENGINE Unsupported engine { npm WARN EBADENGINE package: ‘mdui@1.0.2’, npm WARN E

    2024年02月09日
    瀏覽(24)
  • leetcode 122雙周賽 解題思路+代碼

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

    2024年02月20日
    瀏覽(21)
  • Leetcode 75——1768.交替合并字符串 解題思路與具體代碼【C++】

    Leetcode 75——1768.交替合并字符串 解題思路與具體代碼【C++】

    1768. 交替合并字符串 - 力扣(LeetCode) 給你兩個(gè)字符串? word1 ?和? word2 ?。請(qǐng)你從? word1 ?開(kāi)始,通過(guò)交替添加字母來(lái)合并字符串。如果一個(gè)字符串比另一個(gè)字符串長(zhǎng),就將多出來(lái)的字母追加到合并后字符串的末尾。 返回? 合并后的字符串 ?。 1 = word1.length, word2.length = 100

    2024年02月07日
    瀏覽(20)
  • LeetCode952三部曲之一:解題思路和初級(jí)解法(137ms,超39%)

    LeetCode952三部曲之一:解題思路和初級(jí)解法(137ms,超39%)

    這里分類(lèi)和匯總了欣宸的全部原創(chuàng)(含配套源碼):https://github.com/zq2599/blog_demos 難度: 困難 編程語(yǔ)言:Java 給定一個(gè)由不同正整數(shù)的組成的非空數(shù)組 nums ,考慮下面的圖: 有 nums.length 個(gè)節(jié)點(diǎn),按從 nums[0] 到 nums[nums.length - 1] 標(biāo)記; 只有當(dāng) nums[i] 和 nums[j] 共用一個(gè)大于 1 的公因

    2024年02月10日
    瀏覽(14)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包