Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2022-10-30:给你一个长度为 n 的整数数组 rolls 和一个整数 k 。 你扔一个 k 面的骰子 n 次,骰子的每个面分别是 1 到 k , 其中第

2022-10-30:给你一个长度为 n 的整数数组 rolls 和一个整数 k 。 你扔一个 k 面的骰子 n 次,骰子的每个面分别是 1 到 k , 其中第

原创
作者头像
福大大架构师每日一题
发布于 2022-10-30 14:44:21
发布于 2022-10-30 14:44:21
3720
举报

2022-10-30:给你一个长度为 n 的整数数组 rolls 和一个整数 k 。

你扔一个 k 面的骰子 n 次,骰子的每个面分别是 1 到 k ,

其中第 i 次扔得到的数字是 rollsi 。

请你返回 无法 从 rolls 中得到的 最短 骰子子序列的长度。

扔一个 k 面的骰子 len 次得到的是一个长度为 len 的 骰子子序列 。

注意 ,子序列只需要保持在原数组中的顺序,不需要连续。

输入:rolls = 4,2,1,2,3,3,2,4,1, k = 4。

输出:3。

答案2022-10-30:

这道题很难想到。一次遍历,一套一套收集。

力扣2350。力扣上测试了好几门语言。这次java的运行速度最高,比rust都强了不少。c++表现不好,不见运行速度低,而且内存占用大。rust内存占用最小,go语言次之。

时间复杂度:O(n+k)。

空间复杂度:O(k)。

代码用rust编写。代码如下:

代码语言:rust
AI代码解释
复制
use std::iter::repeat;
impl Solution {
    // 所有数字1~k
    pub fn shortest_sequence(rolls: Vec<i32>, k: i32) -> i32 {
        // 1~k上,某个数字是否收集到了!
        // set[i] == true
        // set[i] == false
        // boolean[] set = new boolean[k + 1];
        let mut set: Vec<bool> = repeat(false).take((k + 1) as usize).collect();
        // 当前这一套,收集了几个数字了?
        let mut size = 0;
        let mut ans = 0;
        for num in rolls.iter() {
            if !set[*num as usize] {
                set[*num as usize] = true;
                size += 1;
            }
            if size == k {
                ans += 1;
                set = repeat(false).take((k + 1) as usize).collect();
                size = 0;
            }
        }
        return ans + 1;
    }
}

fn main() {
    let rolls = vec![4, 2, 1, 2, 3, 3, 2, 4, 1];
    let k = 4;
    let ans = Solution::shortest_sequence(rolls, k);
    println!("ans = {:?}", ans);
}

struct Solution {}

执行结果如下:

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

左神java代码

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长
2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。
福大大架构师每日一题
2022/11/06
3630
2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长
2023-03-02:给定一个数组arr,长度为n, 任意相邻的两个数里面至少要有一个被选出来,组成子序列,才是合法的! 求所有可能的合法子序列中,最大中位数是
2023-03-02:给定一个数组arr,长度为n,任意相邻的两个数里面至少要有一个被选出来,组成子序列,才是合法的!求所有可能的合法子序列中,最大中位数是多少?中位数的定义为上中位数,1, 2, 3, 4的上中位数是2,1, 2, 3, 4, 5的上中位数是3,2 <= n <= 10^5,1 <= arri <= 10^9。来自京东。实习岗位笔试题。答案2023-03-02:这道题看起来是实习题,实际上有难度。方法一:要i还是不要i,递归或者动态规划。方法二:以结果为导向,二分法。时间复杂度:O(N*
福大大架构师每日一题
2023/03/02
5680
2023-03-02:给定一个数组arr,长度为n, 任意相邻的两个数里面至少要有一个被选出来,组成子序列,才是合法的! 求所有可能的合法子序列中,最大中位数是
2022-10-15:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。 你可以按 任意顺序 返回答案。
2022-10-15:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。
福大大架构师每日一题
2022/10/16
7000
2022-10-15:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。 你可以按 任意顺序 返回答案。
2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。 你要用 所有的火柴棍 拼成
2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticksi 是第 i 个火柴棒的长度。
福大大架构师每日一题
2022/10/21
3390
2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。 你要用 所有的火柴棍 拼成
2022-12-10:给你一个由小写字母组成的字符串 s ,和一个整数 k 如果满足下述条件,则可以将字符串 t 视作是 理想字符串 : t 是字符串 s 的一
2022-12-10:给你一个由小写字母组成的字符串 s ,和一个整数 k如果满足下述条件,则可以将字符串 t 视作是 理想字符串 :t 是字符串 s 的一个子序列。t 中每两个 相邻 字母在字母表中位次的绝对差值小于或等于 k 。返回 最长 理想字符串的长度。字符串的子序列同样是一个字符串,并且子序列还满足:可以经由其他字符串删除某些字符(也可以不删除)但不改变剩余字符的顺序得到。注意:字母表顺序不会循环例如,'a' 和 'z' 在字母表中位次的绝对差值是 25,而不是 1 。答案2022-12-10:二
福大大架构师每日一题
2022/12/10
6770
2022-12-10:给你一个由小写字母组成的字符串 s ,和一个整数 k 如果满足下述条件,则可以将字符串 t 视作是 理想字符串 : t 是字符串 s 的一
2022-11-03:给定一个数组arr,和一个正数k 如果arr[i] == 0,表示i这里既可以是左括号也可以是右括号, 而且可以涂上1~k每一种颜色 如果
2022-11-03:给定一个数组arr,和一个正数k如果arri == 0,表示i这里既可以是左括号也可以是右括号,而且可以涂上1~k每一种颜色如果arri != 0,表示i这里已经确定是左括号,颜色就是arri的值那么arr整体就可以变成某个括号字符串,并且每个括号字符都带有颜色。返回在括号字符串合法的前提下,有多少种不同的染色方案。不管是排列、还是颜色,括号字符串任何一点不一样,就算不同的染色方案最后的结果%10001,为了方便,我们不处理mod,就管核心思路。2 <= arr长度 <= 50001
福大大架构师每日一题
2022/11/03
3120
2022-11-03:给定一个数组arr,和一个正数k 如果arr[i] == 0,表示i这里既可以是左括号也可以是右括号, 而且可以涂上1~k每一种颜色 如果
2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调, 例如,数组为 nums = [2,4,1,3,0], 我们按 k =
2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调,
福大大架构师每日一题
2022/11/16
2490
2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调, 例如,数组为 nums = [2,4,1,3,0], 我们按 k =
2023-02-20:小A认为如果在数组中有一个数出现了至少k次, 且这个数是该数组的众数,即出现次数最多的数之一, 那么这个数组被该数所支配, 显然当k比较大
2023-02-20:小A认为如果在数组中有一个数出现了至少k次, 且这个数是该数组的众数,即出现次数最多的数之一, 那么这个数组被该数所支配, 显然当k比较大的时候,有些数组不被任何数所支配。 现在小A拥有一个长度为n的数组,她想知道内部有多少个区间是被某个数支配的。 2 <= k <= n <= 100000, 1 <= 数组的值 <= n。 来自小红书。 答案2023-02-20: 窗口问题。 求总数,求不被支配的数量。 时间复杂度:O(N)。 空间复杂度:O(N)。 代码用rust编写。代码如下:
福大大架构师每日一题
2023/02/20
2380
2023-02-20:小A认为如果在数组中有一个数出现了至少k次, 且这个数是该数组的众数,即出现次数最多的数之一, 那么这个数组被该数所支配, 显然当k比较大
2022-09-07:给你一个由正整数组成的数组 nums 。 数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。 例如,序列 [4,6,16
数组的一个 子序列 本质是一个序列,可以通过删除数组中的某些元素(或者不删除)得到。
福大大架构师每日一题
2022/09/07
7310
2022-09-07:给你一个由正整数组成的数组 nums 。 数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。 例如,序列 [4,6,16
2022-12-18:给定一个长度为n的二维数组graph,代表一张图, graph[i] = {a,b,c,d} 表示i讨厌(a,b,c,d),讨厌关系为双向
graphi = {a,b,c,d} 表示i讨厌(a,b,c,d),讨厌关系为双向的,
福大大架构师每日一题
2022/12/18
2760
2022-12-18:给定一个长度为n的二维数组graph,代表一张图, graph[i] = {a,b,c,d} 表示i讨厌(a,b,c,d),讨厌关系为双向
2023-03-18:给定一个长度n的数组,每次可以选择一个数x, 让这个数组中所有的x都变成x+1,问你最少的操作次数, 使得这个数组变成一个非降数组。 n
本题可以用多种算法来解决,下面我们将介绍四种常见的做法,分别是暴力枚举、动态规划、单调栈和差分。
福大大架构师每日一题
2023/03/18
9870
2023-03-18:给定一个长度n的数组,每次可以选择一个数x, 让这个数组中所有的x都变成x+1,问你最少的操作次数, 使得这个数组变成一个非降数组。 n
2022-12-20:二狗买了一些小兵玩具,和大胖一起玩, 一共有n个小兵,这n个小兵拍成一列, 第i个小兵战斗力为hi,然后他们两个开始对小兵进行排列, 一共
2022-12-20:二狗买了一些小兵玩具,和大胖一起玩,一共有n个小兵,这n个小兵拍成一列,第i个小兵战斗力为hi,然后他们两个开始对小兵进行排列,一共进行m次操作,二狗每次操作选择一个数k,将前k个小兵战斗力从小到大排列,大胖每次操作选择一个数k,将前k个小兵战斗力从大到小排列,问所有操作结束后,排列顺序什么样,给定一个长度为n的数组arr,表示每个小兵的战斗力,给定一个长度为m的数组op, opi = { k , 0 }, 表示对前k个士兵执行从小到大的操作,opi = { k , 1 }, 表示对前
福大大架构师每日一题
2022/12/20
1810
2022-12-20:二狗买了一些小兵玩具,和大胖一起玩, 一共有n个小兵,这n个小兵拍成一列, 第i个小兵战斗力为hi,然后他们两个开始对小兵进行排列, 一共
2022-06-14:数组的最大与和。 给你一个长度为 n 的整数数组 nums 和一个整数 numSlots ,满足2 * numSlots >= n 。总共
给你一个长度为 n 的整数数组 nums 和一个整数 numSlots ,满足2 * numSlots >= n 。总共有 numSlots 个篮子,编号为 1 到 numSlots 。
福大大架构师每日一题
2022/06/14
5460
2022-06-14:数组的最大与和。 给你一个长度为 n 的整数数组 nums 和一个整数 numSlots ,满足2 * numSlots >= n 。总共
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取模,实现的时候没有取模的逻辑,因为非重点。来自微众银行。答案2022-12-22:参考最长递增子序列。代码用rust编写。代码如下:use std::iter::repeat;fn main() {
福大大架构师每日一题
2022/12/22
2.4K0
2022-12-22:给定一个数字n,代表数组的长度, 给定一个数字m,代表数组每个位置都可以在1~m之间选择数字, 所有长度为n的数组中,最长递增子序列长度为
2022-10-23:给你一个整数数组 nums 。如果 nums 的一个子集中, 所有元素的乘积可以表示为一个或多个 互不相同的质数 的乘积,那么我们称它为
2022-10-23:给你一个整数数组 nums 。如果 nums 的一个子集中,
福大大架构师每日一题
2022/10/23
4680
2022-10-23:给你一个整数数组 nums 。如果 nums 的一个子集中, 所有元素的乘积可以表示为一个或多个 互不相同的质数 的乘积,那么我们称它为
2022-11-03:给定一个数组arr,和一个正数k如果arr[i] == 0,表示i这里既可以是左括号也可以是右括号,而且可
[左神java代码](https://github.com/algorithmzuo/weekly-problems/blob/main/src/class_2022_08_2_week/Code01_ParenthesesDye.java)
福大大架构师每日一题
2023/02/01
3670
2022-08-06:给定一个数组arr,长度为N,arr中所有的值都在1~K范围上, 你可以删除数字,目的是让arr的最长递增子序列长度小于K。 返回至少删除
2022-08-06:给定一个数组arr,长度为N,arr中所有的值都在1~K范围上,
福大大架构师每日一题
2022/08/06
9890
2022-08-06:给定一个数组arr,长度为N,arr中所有的值都在1~K范围上, 你可以删除数字,目的是让arr的最长递增子序列长度小于K。 返回至少删除
2022-10-03:给定一个正数n,比如6 表示数轴上有 0,1,2,3,4,5,6 <0 或者 >6 的位置认为无法到达 给定两个数字x和y,0<= x,y
2022-10-03:给定一个正数n,比如6表示数轴上有 0,1,2,3,4,5,6<0 或者 >6 的位置认为无法到达给定两个数字x和y,0<= x,y <= n表示小人一开始在x的位置,它的目的地是y的位置,比如x = 1, y = 3给定一个字符串s,比如 : rrlrlr任何一个s的子序列,对应着一种运动轨迹,r表示向右,l表示向左比如一开始小人在1位置,"rlr"是s的一个子序列那么运动轨迹是:1 -> 2 -> 1 -> 2求,s中有多少个字面值不同的子序列,能让小人从x走到y,走的过程中完全不
福大大架构师每日一题
2022/10/03
5240
2022-10-03:给定一个正数n,比如6 表示数轴上有 0,1,2,3,4,5,6 <0 或者 >6 的位置认为无法到达 给定两个数字x和y,0<= x,y
2022-10-09:我们给出了一个(轴对齐的)二维矩形列表 rectangles 。 对于 rectangle[i] = [x1, y1, x2, y2],其
2022-10-09:我们给出了一个(轴对齐的)二维矩形列表 rectangles 。
福大大架构师每日一题
2022/10/09
3070
2022-10-09:我们给出了一个(轴对齐的)二维矩形列表 rectangles 。 对于 rectangle[i] = [x1, y1, x2, y2],其
2022-12-06:定义一个概念叫“变序最大和“ “变序最大和“是说一个数组中,每个值都可以减小或者不变, 在必须把整体变成严格升序的情况下,得到的最大累加和
2022-12-06:定义一个概念叫"变序最大和" "变序最大和"是说一个数组中,每个值都可以减小或者不变, 在必须把整体变成严格升序的情况下,得到的最大累加和 比如,1,100,7变成1,6,7时,就有变序最大和为14 比如,5,4,9变成3,4,9时,就有变序最大和为16 比如,1,4,2变成0,1,2时,就有变序最大和为3 给定一个数组arr,其中所有的数字都是>=0的。 求arr所有子数组的变序最大和中,最大的那个并返回。 1 <= arr长度 <= 10^6, 0 <= arri <= 10^6。
福大大架构师每日一题
2022/12/06
6470
2022-12-06:定义一个概念叫“变序最大和“ “变序最大和“是说一个数组中,每个值都可以减小或者不变, 在必须把整体变成严格升序的情况下,得到的最大累加和
推荐阅读
2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长
3630
2023-03-02:给定一个数组arr,长度为n, 任意相邻的两个数里面至少要有一个被选出来,组成子序列,才是合法的! 求所有可能的合法子序列中,最大中位数是
5680
2022-10-15:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。 你可以按 任意顺序 返回答案。
7000
2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长度。 你要用 所有的火柴棍 拼成
3390
2022-12-10:给你一个由小写字母组成的字符串 s ,和一个整数 k 如果满足下述条件,则可以将字符串 t 视作是 理想字符串 : t 是字符串 s 的一
6770
2022-11-03:给定一个数组arr,和一个正数k 如果arr[i] == 0,表示i这里既可以是左括号也可以是右括号, 而且可以涂上1~k每一种颜色 如果
3120
2022-11-16:给你一个数组 nums,我们可以将它按一个非负整数 k 进行轮调, 例如,数组为 nums = [2,4,1,3,0], 我们按 k =
2490
2023-02-20:小A认为如果在数组中有一个数出现了至少k次, 且这个数是该数组的众数,即出现次数最多的数之一, 那么这个数组被该数所支配, 显然当k比较大
2380
2022-09-07:给你一个由正整数组成的数组 nums 。 数字序列的 最大公约数 定义为序列中所有整数的共有约数中的最大整数。 例如,序列 [4,6,16
7310
2022-12-18:给定一个长度为n的二维数组graph,代表一张图, graph[i] = {a,b,c,d} 表示i讨厌(a,b,c,d),讨厌关系为双向
2760
2023-03-18:给定一个长度n的数组,每次可以选择一个数x, 让这个数组中所有的x都变成x+1,问你最少的操作次数, 使得这个数组变成一个非降数组。 n
9870
2022-12-20:二狗买了一些小兵玩具,和大胖一起玩, 一共有n个小兵,这n个小兵拍成一列, 第i个小兵战斗力为hi,然后他们两个开始对小兵进行排列, 一共
1810
2022-06-14:数组的最大与和。 给你一个长度为 n 的整数数组 nums 和一个整数 numSlots ,满足2 * numSlots >= n 。总共
5460
2022-12-22:给定一个数字n,代表数组的长度, 给定一个数字m,代表数组每个位置都可以在1~m之间选择数字, 所有长度为n的数组中,最长递增子序列长度为
2.4K0
2022-10-23:给你一个整数数组 nums 。如果 nums 的一个子集中, 所有元素的乘积可以表示为一个或多个 互不相同的质数 的乘积,那么我们称它为
4680
2022-11-03:给定一个数组arr,和一个正数k如果arr[i] == 0,表示i这里既可以是左括号也可以是右括号,而且可
3670
2022-08-06:给定一个数组arr,长度为N,arr中所有的值都在1~K范围上, 你可以删除数字,目的是让arr的最长递增子序列长度小于K。 返回至少删除
9890
2022-10-03:给定一个正数n,比如6 表示数轴上有 0,1,2,3,4,5,6 <0 或者 >6 的位置认为无法到达 给定两个数字x和y,0<= x,y
5240
2022-10-09:我们给出了一个(轴对齐的)二维矩形列表 rectangles 。 对于 rectangle[i] = [x1, y1, x2, y2],其
3070
2022-12-06:定义一个概念叫“变序最大和“ “变序最大和“是说一个数组中,每个值都可以减小或者不变, 在必须把整体变成严格升序的情况下,得到的最大累加和
6470
相关推荐
2022-10-21:你将得到一个整数数组 matchsticks ,其中 matchsticks[i] 是第 i 个火柴棒的长
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档