首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2022-05-29:为了不断提高用户使用的体验,开发团队正在对产品进行全方位的开发和优化。

2022-05-29:为了不断提高用户使用的体验,开发团队正在对产品进行全方位的开发和优化。

原创
作者头像
福大大架构师每日一题
发布于 2022-05-29 12:03:10
发布于 2022-05-29 12:03:10
1571
举报

2022-05-29:为了不断提高用户使用的体验,开发团队正在对产品进行全方位的开发和优化。

已知开发团队共有若干名成员,skillsi 表示第 i 名开发人员掌握技能列表。

如果两名成员各自拥有至少一门对方未拥有的技能,则这两名成员可以「合作开发」。

请返回当前有多少对开发成员满足「合作开发」的条件。

由于答案可能很大,请你返回答案对 10^9 + 7 取余的结果。

来自银联编程比赛。

答案2022-05-29:

总数-不合法的=合法的。

位运算。

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

代码语言:rust
AI代码解释
复制
use std::collections::HashMap;
fn main() {
    let mut arr: Vec<Vec<isize>> = vec![vec![1, 2, 3], vec![3], vec![2, 4]];
    let ans = coop_develop(&mut arr);
    println!("ans = {}", ans);
}

fn coop_develop(skills: &mut Vec<Vec<isize>>) -> isize {
    const MOD: isize = 1000000007;
    let n = skills.len() as isize;
    // key : 子集
    // value : 个数
    let mut no_full_sets_nums: HashMap<isize, isize> = HashMap::new();
    for people in skills.iter_mut() {
        fill_no_full_map(people, 0, 0, true, &mut no_full_sets_nums);
    }
    let mut cnts_nums: HashMap<isize, isize> = HashMap::new();
    let mut minus: isize = 0;
    for people in skills.iter_mut() {
        let mut status: isize = 0;
        for skill in people {
            status = (status << 10) | *skill;
        }
        minus += if no_full_sets_nums.contains_key(&status) {
            *no_full_sets_nums.get(&status).unwrap()
        } else {
            0
        };
        minus += if cnts_nums.contains_key(&status) {
            *cnts_nums.get(&status).unwrap()
        } else {
            0
        };
        cnts_nums.insert(
            status,
            if cnts_nums.contains_key(&status) {
                *cnts_nums.get(&status).unwrap()
            } else {
                0
            } + 1,
        );
    }
    let ans = n * (n - 1) / 2;
    return (ans - minus) % MOD;
}

fn fill_no_full_map(
    people: &mut Vec<isize>,
    i: isize,
    status: isize,
    full: bool,
    no_full_sets_nums: &mut HashMap<isize, isize>,
) {
    if i == people.len() as isize {
        if !full {
            no_full_sets_nums.insert(
                status,
                if no_full_sets_nums.contains_key(&status) {
                    *no_full_sets_nums.get(&status).unwrap()
                } else {
                    0
                } + 1,
            );
        }
    } else {
        fill_no_full_map(people, i + 1, status, false, no_full_sets_nums);
        fill_no_full_map(
            people,
            i + 1,
            (status << 10) | people[i as usize],
            full,
            no_full_sets_nums,
        );
    }
}

执行结果如下:

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

左神java代码

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

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

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

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

评论
登录后参与评论
1 条评论
热度
最新
可以,大佬,互粉一下
可以,大佬,互粉一下
回复回复点赞举报
推荐阅读
编辑精选文章
换一批
2022-05-08:给你一个下标从 0 开始的字符串数组 words 。每个字符串都只包含 小写英文字母 。
2022-05-08:给你一个下标从 0 开始的字符串数组 words 。每个字符串都只包含 小写英文字母 。words 中任意一个子串中,每个字母都至多只出现一次。
福大大架构师每日一题
2022/06/04
7400
2022-05-08:给你一个下标从 0 开始的字符串数组 words 。每个字符串都只包含 小写英文字母 。
2022-06-29:x = { a, b, c, d }, y = { e, f, g, h }, x、y两个小数组长度都是4。 如果有: a + e = b
2022-06-29:x = { a, b, c, d },y = { e, f, g, h },x、y两个小数组长度都是4。如果有: a + e = b + f = c + g = d + h,那么说x和y是一个完美对。题目给定N个小数组,每个小数组长度都是K。返回这N个小数组中,有多少完美对。来自阿里。答案2022-06-29:找特征,存map,求数组相邻数字的差值,组装成key,value是数量。代码用rust编写。代码如下:use std::collections::HashMap;fn main(
福大大架构师每日一题
2022/06/29
3850
2022-06-29:x = { a, b, c, d }, y = { e, f, g, h }, x、y两个小数组长度都是4。 如果有: a + e = b
2022-06-19:给出n个数字,你可以任选其中一些数字相乘,相乘之后得到的新数字x, x的价值是x的不同质因子的数量。 返回所有选择数字的方案中,得到的x的
2022-06-19:给出n个数字,你可以任选其中一些数字相乘,相乘之后得到的新数字x,
福大大架构师每日一题
2022/06/19
7760
2022-06-19:给出n个数字,你可以任选其中一些数字相乘,相乘之后得到的新数字x, x的价值是x的不同质因子的数量。 返回所有选择数字的方案中,得到的x的
2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单 req_skills, 并打算从备选人员名单 p
2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单 req_skills,
福大大架构师每日一题
2023/09/19
3120
2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单 req_skills, 并打算从备选人员名单 p
2022-05-18:假设数组a和数组b为两组信号:1) length(b) <= length(a);2) 对于任意0<=i<
2) 对于任意0<=i<length(b), 有b[i+1] - b[i] == a[i+1] - a[i]。
福大大架构师每日一题
2022/06/04
2570
2022-05-18:假设数组a和数组b为两组信号:1) length(b) <= length(a);2) 对于任意0<=i<
2022-05-08:给你一个下标从 0 开始的字符串数组 words 。每个字符串都只包含 小写英文字母 。words 中任意一个子串中,每个字母都至多只出现
2022-05-08:给你一个下标从 0 开始的字符串数组 words 。每个字符串都只包含 小写英文字母 。words 中任意一个子串中,每个字母都至多只出现一次。
福大大架构师每日一题
2022/05/08
1.1K0
2022-05-18:假设数组a和数组b为两组信号: 1) length(b) <= length(a); 2) 对于任意0<=i<length(b), 有b[
2) 对于任意0<=i<length(b), 有bi+1 - bi == ai+1 - ai。
福大大架构师每日一题
2022/05/18
3110
2022-05-18:假设数组a和数组b为两组信号: 1) length(b) <= length(a); 2) 对于任意0<=i<length(b), 有b[
2022-10-15:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。 你可以按 任意顺序 返回答案。
2022-10-15:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。
福大大架构师每日一题
2022/10/16
7120
2022-10-15:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。 你可以按 任意顺序 返回答案。
2022-07-01:某公司年会上,大家要玩一食发奖金游戏,一共有n个员工,每个员工都有建设积分和捣乱积分,他们需要排成一队,在
该员工奖金 = 排在他前面所有人的建设积分乘积 / 该员工自己的捣乱积分,向下取整,
福大大架构师每日一题
2023/06/08
1730
2022-07-01:某公司年会上,大家要玩一食发奖金游戏,一共有n个员工,每个员工都有建设积分和捣乱积分,他们需要排成一队,在
2023-05-29:给你一个由 n 个正整数组成的数组 nums 你可以对数组的任意元素执行任意次数的两类操作 如果元素是 偶数 ,除以 2 例如,如果数组是
例如,如果数组是 1,2,3,4 ,那么你可以对第一个元素执行此操作,使其变成 2,2,3,4
福大大架构师每日一题
2023/05/29
5310
2023-09-13:用go语言,给定一个整数数组 nums 和一个正整数 k, 找出是否有可能把这个数组分成 k 个非空子集,
第一种算法(canPartitionKSubsets1)使用动态规划的思想,具体过程如下:
福大大架构师每日一题
2023/09/19
2530
2023-09-13:用go语言,给定一个整数数组 nums 和一个正整数 k, 找出是否有可能把这个数组分成 k 个非空子集,
2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数因为结果可能很大,所以返回答案需要对 10^9 +
[左神java代码](https://github.com/algorithmzuo/weekly-problems/blob/main/src/class_2022_07_2_week/Code01_DistinctSubseqValue.java)
福大大架构师每日一题
2022/11/06
3340
2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数因为结果可能很大,所以返回答案需要对 10^9 +
Rust vs Go:常用语法对比(六)
res has type *http.Response. buffer has type []byte. It is idiomatic and strongly recommended to check errors at each step.
fliter
2023/09/05
2410
Rust vs Go:常用语法对比(六)
Rust开发⼲货集(1)--迭代器与消费器
在 Rust 中,"转移所有权"(Ownership Transfer)是一种核心概念,它涉及变量和数据的所有权从一个实体转移到另一个实体。这种机制帮助 Rust 在编译时期管理内存安全,避免悬挂指针和内存泄漏等问题。
fliter
2024/01/09
2210
2023-07-18:给你一个正整数数组 nums,请你移除 最短 子数组(可以为 空), 使得剩余元素的 和 能被 p 整除。
2023-07-18:给你一个正整数数组 nums,请你移除 最短 子数组(可以为 空),
福大大架构师每日一题
2023/07/25
3000
2023-07-18:给你一个正整数数组 nums,请你移除 最短 子数组(可以为 空), 使得剩余元素的 和 能被 p 整除。
rust写操作系统 rCore tutorial 学习笔记:实验指导六 用户程序与系统调用
这是 os summer of code 2020 项目每日记录的一部分: 每日记录github地址(包含根据实验指导实现的每个阶段的代码):https://github.com/yunwei37/os-summer-of-code-daily
云微
2023/02/11
1.2K0
2023java面试算法真题 python go rust js 解法
1. 两数之和为定值的问题。给定一个整数数组和一个目标值,找出数组中两数之和为目标值的索引。
疯狂的KK
2023/05/12
4820
2023java面试算法真题 python go rust js 解法
【译】教你用16个小时从0构建一个Rust应用
我们之中有的人只是单纯为了好玩,有的是想学一些新的知识,还有些人可能是想证明一些概念或想法。
Jackeyzhe
2020/03/10
9280
Rustilings 练习笔记
Rust有类型检查,执行运算或者赋值时候要遵循类型的规律,但是Rust可以重新定义同名变量,变量的类型可以发生改变
用户7267083
2023/03/20
1.5K0
AI copilot 能提升开发效率么?
作为 Github copilot 刚 beta 发布就重度使用至今的有二十多年码龄四十多岁还在写代码的码农,我觉得我有足够的说服力来阐述我对这个问题的理解。当然,口说无凭,本着「谁主张谁举证」的民事诉讼原则,我拿 github 自身的 copilot statistics API 看了一下我过去近三周的使用数据(我不是每天都写代码,所以有些天没数据),惊奇地发现我使用 copilot 比我想象得还要「勤劳」:
tyrchen
2024/06/04
2570
AI copilot 能提升开发效率么?
推荐阅读
2022-05-08:给你一个下标从 0 开始的字符串数组 words 。每个字符串都只包含 小写英文字母 。
7400
2022-06-29:x = { a, b, c, d }, y = { e, f, g, h }, x、y两个小数组长度都是4。 如果有: a + e = b
3850
2022-06-19:给出n个数字,你可以任选其中一些数字相乘,相乘之后得到的新数字x, x的价值是x的不同质因子的数量。 返回所有选择数字的方案中,得到的x的
7760
2023-09-10:用go语言编写。作为项目经理,你规划了一份需求的技能清单 req_skills, 并打算从备选人员名单 p
3120
2022-05-18:假设数组a和数组b为两组信号:1) length(b) <= length(a);2) 对于任意0<=i<
2570
2022-05-08:给你一个下标从 0 开始的字符串数组 words 。每个字符串都只包含 小写英文字母 。words 中任意一个子串中,每个字母都至多只出现
1.1K0
2022-05-18:假设数组a和数组b为两组信号: 1) length(b) <= length(a); 2) 对于任意0<=i<length(b), 有b[
3110
2022-10-15:给你一个整数数组 nums 和一个整数 k ,请你返回其中出现频率前 k 高的元素。 你可以按 任意顺序 返回答案。
7120
2022-07-01:某公司年会上,大家要玩一食发奖金游戏,一共有n个员工,每个员工都有建设积分和捣乱积分,他们需要排成一队,在
1730
2023-05-29:给你一个由 n 个正整数组成的数组 nums 你可以对数组的任意元素执行任意次数的两类操作 如果元素是 偶数 ,除以 2 例如,如果数组是
5310
2023-09-13:用go语言,给定一个整数数组 nums 和一个正整数 k, 找出是否有可能把这个数组分成 k 个非空子集,
2530
2022-10-01:给定一个字符串 s,计算 s 的 不同非空子序列 的个数因为结果可能很大,所以返回答案需要对 10^9 +
3340
Rust vs Go:常用语法对比(六)
2410
Rust开发⼲货集(1)--迭代器与消费器
2210
2023-07-18:给你一个正整数数组 nums,请你移除 最短 子数组(可以为 空), 使得剩余元素的 和 能被 p 整除。
3000
rust写操作系统 rCore tutorial 学习笔记:实验指导六 用户程序与系统调用
1.2K0
2023java面试算法真题 python go rust js 解法
4820
【译】教你用16个小时从0构建一个Rust应用
9280
Rustilings 练习笔记
1.5K0
AI copilot 能提升开发效率么?
2570
相关推荐
2022-05-08:给你一个下标从 0 开始的字符串数组 words 。每个字符串都只包含 小写英文字母 。
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档