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

Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

這篇具有很好參考價值的文章主要介紹了Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

目錄

84. 柱狀圖中最大的矩形 Largest-rectangle-in-histogram????????

85. 最大矩形 Maximal Rectangle????????

87. 擾亂字符串 Scramble String????????

?? 每日一練刷題專欄???

Rust每日一練 專欄

Golang每日一練 專欄

Python每日一練 專欄

C/C++每日一練 專欄

Java每日一練 專欄


84. 柱狀圖中最大的矩形 Largest-rectangle-in-histogram

給定?n?個非負整數(shù),用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。

求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。

示例 1:

Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

輸入:heights = [2,1,5,6,2,3]
輸出:10
解釋:最大的矩形為圖中紅色區(qū)域,面積為 10

示例 2:

Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

輸入: heights = [2,4]
輸出: 4

提示:

  • 1 <= heights.length <=10^5
  • 0 <= heights[i] <= 10^4?

代碼1:?暴力枚舉

fn largest_rectangle_area(heights: Vec<i32>) -> i32 {
    let n = heights.len();
    let mut max_area = 0;
    for i in 0..n {
        let mut left = i;
        let mut right = i;
        while left > 0 && heights[left - 1] >= heights[i] {
            left -= 1;
        }
        while right < n - 1 && heights[right + 1] >= heights[i] {
            right += 1;
        }
        let area = heights[i] * (right - left + 1) as i32;
        if area > max_area {
            max_area = area;
        }
    }
    max_area
}

fn main() {
    let heights = vec![2, 1, 5, 6, 2, 3];
    println!("{}", largest_rectangle_area(heights)); // 輸出:10

    let heights = vec![2, 4];
    println!("{}", largest_rectangle_area(heights)); // 輸出:4
}

代碼2:?單調(diào)棧

fn largest_rectangle_area(heights: Vec<i32>) -> i32 {
    let n = heights.len();
    let mut stack = Vec::new();
    let mut max_area = 0;
    for i in 0..=n {
        let cur_height = if i == n { 0 } else { heights[i] };
        while !stack.is_empty() && cur_height < heights[*stack.last().unwrap()] {
            let h = heights[stack.pop().unwrap()];
            let w = if stack.is_empty() { i } else { i - stack.last().unwrap() - 1 };
            let area = h * w as i32;
            if area > max_area {
                max_area = area;
            }
        }
        stack.push(i);
    }
    max_area
}

fn main() {
    let heights = vec![2, 1, 5, 6, 2, 3];
    println!("{}", largest_rectangle_area(heights)); // 輸出:10

    let heights = vec![2, 4];
    println!("{}", largest_rectangle_area(heights)); // 輸出:4
}

輸出:

10
4


85. 最大矩形 Maximal Rectangle

給定一個僅包含?0?和?1?、大小為?rows x cols?的二維二進制矩陣,找出只包含?1?的最大矩形,并返回其面積。

示例 1:

Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

輸入:matrix = [["1","0","1","0","0"],["1","0","1","1","1"],["1","1","1","1","1"],["1","0","0","1","0"]]
輸出:6
解釋:最大矩形如上圖所示。

示例 2:

輸入:matrix = []
輸出:0

示例 3:

輸入:matrix = [["0"]]
輸出:0

示例 4:

輸入:matrix = [["1"]]
輸出:1

示例 5:

輸入:matrix = [["0","0"]]
輸出:0

提示:

  • rows == matrix.length
  • cols == matrix[0].length
  • 1 <= row, cols <= 200
  • matrix[i][j]?為?'0'?或?'1'

?代碼:

fn maximal_rectangle(matrix: Vec<Vec<char>>) -> i32 {
    let rows = matrix.len();
    if rows == 0 {
        return 0;
    }
    let cols = matrix[0].len();
    let mut heights = vec![0; cols];
    let mut max_area = 0;
    for i in 0..rows {
        for j in 0..cols {
            if matrix[i][j] == '1' {
                heights[j] += 1;
            } else {
                heights[j] = 0;
            }
        }
        let area = largest_rectangle_area(&heights);
        if area > max_area {
            max_area = area;
        }
    }
    max_area
}

fn largest_rectangle_area(heights: &Vec<i32>) -> i32 {
    let mut stack = Vec::new();
    let mut max_area = 0;
    let mut i = 0;
    while i <= heights.len() {
        let h = if i == heights.len() { 0 } else { heights[i] };
        while !stack.is_empty() && h < heights[*stack.last().unwrap()] {
            let height = heights[stack.pop().unwrap()];
            let width = if stack.is_empty() { i } else { i - stack.last().unwrap() - 1 };
            let area = height * width as i32;
            if area > max_area {
                max_area = area;
            }
        }
        stack.push(i);
        i += 1;
    }
    max_area
}

fn main() {
    let matrix = vec![
        vec!['1', '0', '1', '0', '0'],
        vec!['1', '0', '1', '1', '1'],
        vec!['1', '1', '1', '1', '1'],
        vec!['1', '0', '0', '1', '0']
    ];
    println!("{}", maximal_rectangle(matrix));
}

輸出:

6


87. 擾亂字符串 Scramble String

使用下面描述的算法可以擾亂字符串?s?得到字符串?t?:

  1. 如果字符串的長度為 1 ,算法停止
  2. 如果字符串的長度 > 1 ,執(zhí)行下述步驟:
    • 在一個隨機下標處將字符串分割成兩個非空的子字符串。即,如果已知字符串?s?,則可以將其分成兩個子字符串?x?和?y?,且滿足?s = x + y?。
    • 隨機?決定是要「交換兩個子字符串」還是要「保持這兩個子字符串的順序不變」。即,在執(zhí)行這一步驟之后,s?可能是?s = x + y?或者?s = y + x?。
    • 在?x?和?y?這兩個子字符串上繼續(xù)從步驟 1 開始遞歸執(zhí)行此算法。

給你兩個?長度相等?的字符串?s1?和?s2,判斷?s2?是否是?s1?的擾亂字符串。如果是,返回?true?;否則,返回?false?。

示例 1:

輸入:s1 = "great", s2 = "rgeat"
輸出:true
解釋:s1 上可能發(fā)生的一種情形是:
"great" --> "gr/eat" // 在一個隨機下標處分割得到兩個子字符串
"gr/eat" --> "gr/eat" // 隨機決定:「保持這兩個子字符串的順序不變」
"gr/eat" --> "g/r / e/at" // 在子字符串上遞歸執(zhí)行此算法。兩個子字符串分別在隨機下標處進行一輪分割
"g/r / e/at" --> "r/g / e/at" // 隨機決定:第一組「交換兩個子字符串」,第二組「保持這兩個子字符串的順序不變」
"r/g / e/at" --> "r/g / e/ a/t" // 繼續(xù)遞歸執(zhí)行此算法,將 "at" 分割得到 "a/t"
"r/g / e/ a/t" --> "r/g / e/ a/t" // 隨機決定:「保持這兩個子字符串的順序不變」
算法終止,結(jié)果字符串和 s2 相同,都是 "rgeat"
這是一種能夠擾亂 s1 得到 s2 的情形,可以認為 s2 是 s1 的擾亂字符串,返回 true

示例 2:

輸入:s1 = "abcde", s2 = "caebd"
輸出:false

示例 3:

輸入:s1 = "a", s2 = "a"
輸出:true

提示:

  • s1.length == s2.length
  • 1 <= s1.length <= 30
  • s1?和?s2?由小寫英文字母組成

代碼:

fn is_scramble(s1: String, s2: String) -> bool {
    let s1 = s1.as_bytes();
    let s2 = s2.as_bytes();
    let n = s1.len();
    if s1 == s2 {
        return true;
    }
    if n != s2.len() {
        return false;
    }
    let mut dp = vec![vec![vec![false; n + 1]; n]; n];
    for i in 0..n {
        for j in 0..n {
            dp[i][j][1] = s1[i] == s2[j];
        }
    }
    for l in 2..=n {
        for i in 0..=n-l {
            for j in 0..=n-l {
                for k in 1..l {
                    if (dp[i][j][k] && dp[i+k][j+k][l-k]) || (dp[i][j+l-k][k] && dp[i+k][j][l-k]) {
                        dp[i][j][l] = true;
                        break;
                    }
                }
            }
        }
    }
    dp[0][0][n]
}

fn main() {
    let s1 = String::from("abcde");
    let s2 = String::from("caebd");
    println!("{}", is_scramble(s1, s2));
    let s1 = String::from("a");
    let s2 = String::from("a");
    println!("{}", is_scramble(s1, s2));
}

輸出:

false
true


?? 每日一練刷題專欄???

? 持續(xù),努力奮斗做強刷題搬運工!

?? 點贊,你的認可是我堅持的動力!?

???收藏,你的青睞是我努力的方向!?

? 評論,你的意見是我進步的財富!??

??主頁:https://hannyang.blog.csdn.net/

Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

Rust每日一練 專欄

(2023.5.16~)更新中...

Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

Golang每日一練 專欄

(2023.3.11~)更新中...

Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

Python每日一練 專欄

(2023.2.18~2023.5.18)暫停更

Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

C/C++每日一練 專欄

(2023.2.18~2023.5.18)暫停更

Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串

Java每日一練 專欄

(2023.3.11~2023.5.18)暫停更

6.13 生日快樂文章來源地址http://www.zghlxwxcb.cn/news/detail-483321.html

到了這里,關(guān)于Rust每日一練(Leetday0029) 柱狀圖、最大矩形、擾亂字符串的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Rust每日一練(Leetday0025) 矩陣置零、搜索二維矩陣、顏色分類

    Rust每日一練(Leetday0025) 矩陣置零、搜索二維矩陣、顏色分類

    目錄 73. 矩陣置零 Set Matrix Zeroes?????? 74. 搜索二維矩陣 Search A 2d-Matrix?????? 75. 顏色分類 Sort Colors?????? ?? 每日一練刷題專欄??? Rust每日一練 專欄 Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 給定一個? m ?x? n ?的矩陣,如果一個元

    2024年02月11日
    瀏覽(55)
  • Rust每日一練(Leetday0012) 首末位置、插入位置、有效數(shù)獨

    Rust每日一練(Leetday0012) 首末位置、插入位置、有效數(shù)獨

    目錄 34. 查找元素的首末位置 Find-first-and-last-position-of-element-in-sorted-array?????? 35. 搜索插入位置 Search Insert Position???? 36. 有效的數(shù)獨 Valid Sudoku?????? ?? 每日一練刷題專欄??? Rust每日一練 專欄 Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專

    2024年02月09日
    瀏覽(22)
  • 算法leetcode|84. 柱狀圖中最大的矩形(rust重拳出擊)

    算法leetcode|84. 柱狀圖中最大的矩形(rust重拳出擊)

    給定 n 個非負整數(shù),用來表示柱狀圖中各個柱子的高度。每個柱子彼此相鄰,且寬度為 1 。 求在該柱狀圖中,能夠勾勒出來的矩形的最大面積。 1 = heights.length =10 5 0 = heights[i] = 10 4 面對這道算法題目,二當家的再次陷入了沉思。 眼睛一看似乎有思路,但是一動手就容易不知

    2024年02月08日
    瀏覽(34)
  • Rust每日一練(Leetday0020) 最后單詞的長度、螺旋矩陣II、排列序列

    Rust每日一練(Leetday0020) 最后單詞的長度、螺旋矩陣II、排列序列

    目錄 58. 最后一個單詞的長度 Length of Last Word???? 59. 螺旋矩陣 II Spiral Matrix II?????? 60. 排列序列 Permutation Sequence???????? ?? 每日一練刷題專欄??? Rust每日一練 專欄 Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 給你一個字符串? s ,由

    2024年02月10日
    瀏覽(58)
  • Golang每日一練(leetDay0079) 最大正方形、完全二叉樹節(jié)點數(shù)

    Golang每日一練(leetDay0079) 最大正方形、完全二叉樹節(jié)點數(shù)

    目錄 221. 最大正方形 Maximal Square?????? 222. 完全二叉樹的節(jié)點個數(shù) Count Complete Tree Nodes?????? ?? 每日一練刷題專欄??? Rust每日一練 專欄 Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 在一個由? \\\'0\\\' ?和? \\\'1\\\' ?組成的二維矩陣內(nèi),找到只包

    2024年02月08日
    瀏覽(47)
  • Rust每日一練(Leetday0027) 單詞搜索、刪除重復(fù)項II、搜索旋轉(zhuǎn)排序數(shù)組II

    Rust每日一練(Leetday0027) 單詞搜索、刪除重復(fù)項II、搜索旋轉(zhuǎn)排序數(shù)組II

    目錄 79. 單詞搜索 Word Search?????? 80. 刪除有序數(shù)組中的重復(fù)項 II Remove-duplicates-from-sorted-array-II?????? 81. 搜索旋轉(zhuǎn)排序數(shù)組 II Search-in-rotated-sorted-array-II?????? ?? 每日一練刷題專欄??? Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 給定一

    2024年02月08日
    瀏覽(24)
  • Golang每日一練(leetDay0004)

    Golang每日一練(leetDay0004)

    目錄 10.?正則表達式匹配?Regular Expression Matching???????? 11. 盛最多水的容器 Container with most water?????? 12. 整數(shù)轉(zhuǎn)羅馬數(shù)字 Integer to Roman?????? ???每日一練刷題專欄??? Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 給你一個字符串?

    2023年04月08日
    瀏覽(30)
  • Golang每日一練(leetDay0022)

    Golang每日一練(leetDay0022)

    目錄 64. 最小路徑和 Minimum Path Sum?????? 65. 有效數(shù)字 Valid Number???????? 66. 加一 Plus One???? ?? 每日一練刷題專欄??? Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 給定一個包含非負整數(shù)的? m ?x? n ?網(wǎng)格? grid ?,請找出一條從左上角到

    2023年04月21日
    瀏覽(27)
  • Golang每日一練(leetDay0031)

    Golang每日一練(leetDay0031)

    目錄 91. 解碼方法? Decode Ways?????? 93. 復(fù)原 IP 地址 Restore IP Addresses?????? ?? 每日一練刷題專欄??? Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 注:92.題 移到206.題之后 92. 反轉(zhuǎn)鏈表 II Reverse Linked List II 一條包含字母? A-Z ?的消息通過以

    2023年04月19日
    瀏覽(65)
  • Golang每日一練(leetDay0052)

    Golang每日一練(leetDay0052)

    目錄 153. 尋找旋轉(zhuǎn)排序數(shù)組中的最小值 Find Minimum In Rotated Sorted Array?????? 154. 尋找旋轉(zhuǎn)排序數(shù)組中的最小值 II Find Minimum In Rotated Sorted Array II???????? ?? 每日一練刷題專欄??? Golang每日一練 專欄 Python每日一練 專欄 C/C++每日一練 專欄 Java每日一練 專欄 已知一個長度為

    2024年02月02日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包