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

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-10-30:给你一个长度为 n 的整数数组 rolls 和一个整数 k 。 你扔一个 k 面的骰子 n 次,骰子的每个面分别是 1 到 k , 其中第 i 次扔得到的数字是 rolls[i]相关的知识,希望对你有一定的参考价值。

2022-10-30:给你一个长度为 n 的整数数组 rolls 和一个整数 k 。
你扔一个 k 面的骰子 n 次,骰子的每个面分别是 1 到 k ,
其中第 i 次扔得到的数字是 rolls[i] 。
请你返回 无法 从 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编写。代码如下:

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代码

以上是关于2022-10-30:给你一个长度为 n 的整数数组 rolls 和一个整数 k 。 你扔一个 k 面的骰子 n 次,骰子的每个面分别是 1 到 k , 其中第 i 次扔得到的数字是 rolls[i]的主要内容,如果未能解决你的问题,请参考以下文章

限长最大连续和

2022-01-18:将数组分成两个数组并最小化数组和的差。 给你一个长度为 2 * n 的整数数组。你需要将 nums 分成 两个 长度为 n 的数组,分别求出两个数组的和,并 最小化 两个数组和之

风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,

风口之下,猪都能飞。当今中国股市牛市,真可谓“错过等七年”。 给你一个回顾历史的机会,已知一支股票连续n天的价格走势,以长度为n的整数数组表示,

2021-10-29:除自身以外数组的乘积。给你一个长度为 n 的整数数组 nums,其中 n > 1,返回输出数组 output ,其中 output[i] 等于 nums 中除 nums[i] 之

2021-11-15:四数相加 II。给你四个整数数组 nums1nums2nums3 和 nums4 ,数组长度都是 n ,请你计算有多少个元组 (i, j, k, l) 能满足:0 <= i,(代