栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java&C++题解与拓展——leetcode2028.找出缺失的观测数据【vector学习与使用】

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java&C++题解与拓展——leetcode2028.找出缺失的观测数据【vector学习与使用】

每日一题做题记录,参考官方和三叶的题解

目录

题目要求思路

JavaC++

vector 总结

题目要求

思路

可以算出丢失的 n n n个值之和 s u m sum sum,然后构造一个加起来恰好得 s u m sum sum的数组res即可【 ∑ i = 0 n r e s [ i ] = s u m sum_{i=0}^nres[i]=sum ∑i=0n​res[i]=sum】。

r e s [ i ] ∈ [ 1 , 6 ] res[i] in [1,6] res[i]∈[1,6],所以 s u m ∈ [ n , 6 ∗ n ] sum in [n,6*n] sum∈[n,6∗n],否则无解返回空数组;有解的时候,一定可以构造出一个包含 a a a个 ⌊ s u m n ⌋ lfloorfrac{sum}{n}rfloor ⌊nsum​⌋和 n − a n-a n−a个 ⌊ s u m n ⌋ + 1 lfloorfrac{sum}{n}rfloor + 1 ⌊nsum​⌋+1的结果。那么将res填充为 ⌊ s u m n ⌋ lfloorfrac{sum}{n}rfloor ⌊nsum​⌋,然后计算需要补 1 1 1的数量,也就是 s u m sum sum与 ⌊ s u m n ⌋ ∗ n lfloorfrac{sum}{n}rfloor*n ⌊nsum​⌋∗n的差值 d i s dis dis,将这些 1 1 1加在res的 d i s dis dis个数上。 Java

class Solution {
    public int[] missingRolls(int[] rolls, int mean, int n) {
        int m = rolls.length, cnt = m + n;
        int sum = mean * cnt;
        for(int i : rolls)
            sum -= i;
        if(sum < n || sum > 6 * n)
            return new int[0];
        int[] res = new int[n];
        //构造结果
        Arrays.fill(res, sum / n);
        //保证整除
        if(sum / n * n < sum) {
            int dis = sum - (sum / n * n), idx = 0;
            while(dis-- > 0)
                res[idx++]++;
        }
        return res;
    }
}

时间复杂度: O ( m + n ) O(m + n) O(m+n)空间复杂度: O ( n ) O(n) O(n) C++

class Solution {
public:
    vector missingRolls(vector& rolls, int mean, int n) {
        int m = rolls.size(), cnt = m + n;
        int sum = mean * cnt;
        for(int i : rolls)
            sum -= i;
        if(sum < n || sum > 6 * n)
            return {};
        //构造结果
        vector res(n, sum / n);
        //保证整除
        if(sum / n * n < sum) {
            int dis = sum - (sum / n * n), idx = 0;
            while(dis-- > 0)
                res[idx++]++;
        }
        return res;
    }
};

时间复杂度: O ( m + n ) O(m + n) O(m+n)空间复杂度: O ( n ) O(n) O(n) vector

学习参考链接前两天刚学习整理过,今天主要是学习一下如何快速插入多个相同的元素。如何添加 c n t cnt cnt个 v a l val val,参考

初始化时直接添加:

std::vector res(cnt, val);

用insert函数

res.insert(res.end(), cnt, val);//在末尾添加
总结

题目思路不难,主要是想好如何构造能整除的答案。


欢迎指正与讨论!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/786196.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号