首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

2023-02-11:给你两整数 mn 。构造一 m x n 网格,其中每个单元格最开始是白色,请你用 红、绿、蓝

2023-02-11:给你两整数 mn 。构造一 m x n 网格,其中每个单元格最开始是白色, 请你用 红、绿、蓝 三种颜色每个单元格涂色。...所有单元格都需要被涂色, 涂色方案需要满足:不存在相邻两单元格颜色相同情况。 返回网格涂色方法数。因为答案可能非常大。 返回 对 109 + 7 取余 结果。 1 <= n <= 1000。...("ans3 = {}", ans3); } static MOD: i32 = 1000000007; fn color_the_grid(m: i32, n: i32) -> i32 {...: i32, n: i32, m: i32, dp: &mut Vec>>) -> i32 { if i == n { return 1; }...if j == m { return process(i + 1, 0, s, n, m, dp); } if dp[i as usize][j as usize

19110

给定m不重复字符 ,以及一长度n字符串tbcacbdata滑动窗口

题目 给定m不重复字符 [a, b, c, d],以及一长度n字符串tbcacbdata, 问能否在这个字符串中找到一长度m连续子串,使得这个子串刚好由上面m个字符组成,顺序无所谓,返回任意满足条件子串起始位置...本题子串需要满足长度m,字符不重复,可以使用长m滑动窗口遍历字符串,窗口内每个字符都要出现一次,如果符合条件,就返回窗口起始位置。...滑动窗口算法 滑动问题包含一滑动窗口,它是一运行在一大数组上子列表,该数组是一底层元素集合。...假设有数组 [a b c d e f g h ],一大小 3 滑动窗口在其上滑动,则有: [a b c] [b c d] [c d e] [d e f] [...代码 /** * 给定m不重复字符 [a, b, c, d],以及一长度n字符串tbcacbdata, * 能否在这个字符串中找到一长度m连续子串,使得这个子串刚好由上面

26210

2021-06-30:给定长度m字符串aim,以及一长度n字符串str ,问能否在str中找到一长度m连续子串,

2021-06-30:给定长度m字符串aim,以及一长度n字符串str ,问能否在str中找到一长度m连续子串, 使得这个子串刚好由aimm个字符组成,顺序无所谓, 返回任意满足条件子串起始位置...all := M R := 0 // 0~M-1 for ; R < M; R++ { // 最早M个字符,让其窗口初步形成 if count[s1[R]] >...all-- } else { count[s1[R]]-- } } // 窗口初步形成了,并没有判断有效无效,决定下一位置一上来判断...// 接下来过程,窗口右进一,左吐一 for ; R < len(s1); R++ { if all == 0 { // R-1 return...else { count[s1[R]]-- } if count[s1[R-M]] >= 0 { count[s1[R-M

81430

2023-02-11:给你两整数 mn 。构造一 m x n 网格,其中每个单元格最开始是白色, 请你用 红、绿、蓝 三种颜色每个单元格涂色。所有

2023-02-11:给你两整数 mn 。构造一 m x n 网格,其中每个单元格最开始是白色,请你用 红、绿、蓝 三种颜色每个单元格涂色。...所有单元格都需要被涂色,涂色方案需要满足:不存在相邻两单元格颜色相同情况。返回网格涂色方法数。因为答案可能非常大。返回 对 109 + 7 取余 结果。1 <= n <= 1000。...usize).collect()) .take(m as usize) .collect(), ) .take(n as usize) ....collect(); return process(0, 0, 0, n, m, &mut dp);}fn process(i: i32, j: i32, s: i32, n: i32, m: i32...process(i + 1, 0, s, n, m, dp); } if dp[i as usize][j as usize][s as usize] !

58910

已知两长度分别为mn升序链表,若将它们合并为长度m+n降序链表,则最坏情况下时间复杂度是

已知两长度分别为mn升序链表,若将它们合并为长度m+n降序链表,则最坏情况下时间复杂度是()。...首先明确,题目让我们求复杂度,这里显然不是讨论移动次数,因为不论什么情况,移动次数都是(M+N),不需要讨论 所以这里求是合并过程中比较次数 最好情况,很容易想,就是长度较短数列中最小数还比另一数列最大数字大...,如(7 8 9和 1 2 3 4 ),这种情况需要比较min(m,n)次就好了,复杂度O(min(m,n))。...故最坏情况比较次数(m+n-1) 次 给几个例子试试:1 3 5 7 9 和 2 4 6 8 10 / 1 3 5 和 2 4 那么,题目要求最坏情况复杂度,就是O(m+n-1...)咯 可是选项没有,哈哈,别急,比较次数是 (m+n-1) 次,mn次幂都是1,所以复杂度也是一次就行了,那么到底是O(n)还是O(m)呢,肯定选最大那个啊,因为是最坏情况,故复杂度O(Max(

10910

有一 m x n 二元网格,其中 1 表

有一 m x n 二元网格,其中 1 表示砖块,0 表示空白。砖块 稳定(不会掉落)前提是:1.一块砖直接连接到网格顶部,或者,2.至少有一块相邻(4 方向之一)砖块 稳定 不会掉落时。...给你一数组 hits ,这是需要依次消除砖块位置。每当消除 hitsi = (rowi, coli) 位置上砖块时,对应位置砖块(若存在)会消失,然后其他砖块可能因为这一消除操作而掉落。...一旦砖块掉落,它会立即从网格中消失(即,它不会落在其他稳定砖块上)。返回一数组 result ,其中 resulti 表示第 i 次消除操作对应掉落砖块数目。...int M int // 有多少块砖,连到了天花板上 cellingAll int // 原始矩阵,因为炮弹影响,1 -> 2 grid [][]int...= len(this.grid) this.M = len(this.grid[0]) all := this.N * this.M this.cellingAll = 0

27710

2022-12-22:给定一数字n,代表数组长度,给定一数字m,代表数组每个位置都可以在1~m之间选择数字,所有长度n

2022-12-22:给定一数字n,代表数组长度, 给定一数字m,代表数组每个位置都可以在1~m之间选择数字, 所有长度n数组中,最长递增子序列长度3数组,叫做达标数组。...返回达标数组数量。 1 <= n <= 500, 1 <= m <= 10, 500 * 10 * 10 * 10, 结果对998244353取模, 实现时候没有取模逻辑,因为非重点。...).take(n as usize).collect(); return process1(0, n, m, &mut a); } fn process1(i: i32, n: i32, m:...// n : 一共长度! // m : 每一位,都可以在1~m中随意选择数字 // 返回值:i..... 有几个合法数组!...// 尤其是理解ends数组意义! fn number2(n: i32, m: i32) -> i32 { //repeat(vec!

87150

- 从长度mint数组中随机取出n元素,每次取元素都是之前未取过

题目:从长度mint数组中随机取出n元素,每次取元素都是之前未取过 Fisher-Yates洗牌算法是由 Ronald A.Fisher和Frank Yates于1938年发明,后来被Knuth...用洗牌算法思路从1、2、3、4、5这5数中,随机取一数 4被抽中概率是1/5 5被抽中概率是1/4 * 4/5 = 1/5 2被抽中概率是1/3 * 3/4 *...O(n^2), 空间复杂度O(n) 代码如下: //O(N^2)time //O(N)space void test(int n, int m) { List list...该算法基本思想和 Fisher 类似,每次从未处理数据中随机取出一数字,然后把该数字放在数组尾部,即数组尾部存放是已经处理过数字。...时间复杂度O(n), 空间复杂度O(n) //O(N)time //O(N)space void knuth(int n, int m) { int[] arr = new int[n];

1.6K10

2023-05-11:给你一 m x n 二进制矩阵 grid, 每个格子要么 0 (空)要么 1 (被占据), 给你邮票尺寸 stampHeigh

2023-05-11:给你一 m x n 二进制矩阵 grid,每个格子要么 0 (空)要么 1 (被占据),给你邮票尺寸 stampHeight x stampWidth。...这里 diff 矩阵用于记录每个位置变化量。3.遍历 grid 中一行,使用滚动数组方式还原 cnt 和 pre 数组,并通过它们来计算列中 0 位置数量。...同时,如果某个位置 (i, j) 0 且它所在列中没有其他 0,则返回 false;否则返回 true。时间复杂度 O(mn),其中 mn 分别表示矩阵 grid 行数和列数。...空间复杂度 O(mn),因为函数中创建了两 m+1 行 n+1 列二维数组 sum 和 diff,以及一长度 n+1 一维数组 cnt 和 pre。...这些数组所占用总空间 (m+1)(n+1) + 2(n+1) = mn + 3m + 3n + 3,即 O(mn)。

41420

2022-08-26:用一大小 m x n 二维网格 grid 表示一箱子你有 n 颗球。箱子顶部和底部都是开着。箱

2022-08-26:用一大小 m x n 二维网格 grid 表示一箱子 你有 n 颗球。箱子顶部和底部都是开着。...箱子中每个单元格都有一对角线挡板,跨过单元格角, 可以将球导向左侧或者右侧。 将球导向右侧挡板跨过左上角和右下角,在网格中用 1 表示。...将球导向左侧挡板跨过右上角和左下角,在网格中用 -1 表示。 在箱子一列顶端各放一颗球。每颗球都可能卡在箱子里或从底部掉出来。...返回一大小 n 数组 answer , 其中 answer[i] 是球放在顶部第 i 列后从底部掉出来那一列对应下标, 如果球卡在盒子里,则返回 -1。...) let mut i = 0; let mut j = col; while i < n { // (i,j) 左上 -> 右下格子

33930

2022-04-22:给你一大小 m x n 矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 X 或者是一

2022-04-22:给你一大小 m x n 矩阵 board 表示甲板,其中,每个单元格可以是一艘战舰 'X' 或者是一空位 '.' ,返回在甲板 board 上放置 战舰 数量。...换句话说,战舰只能按 1 x k(1 行,k 列)或 k x 1(k 行,1 列)形状建造,其中 k 可以是任意大小。两艘战舰之间至少有一水平或垂直空位分隔 (即没有相邻战舰)。...数战舰左上角,统计左上角个数就行。 时间复杂度:O(N**2)。 代码用rust编写。代码如下: fn main() { let m: Vec> = vec!...for i in 0..m.len() { for j in 0..m[0].len() { if m[i][j] == 'X' && (i == 0 || m[...= 'X') && (j == 0 || m[i][j - 1] !

36130
领券