Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2022-07-01:某公司年会上,大家要玩一食发奖金游戏,一共有n个员工, 每个员工都有建设积分和捣乱积分, 他们需要排成一队,在队伍最前面的一定是老板

2022-07-01:某公司年会上,大家要玩一食发奖金游戏,一共有n个员工, 每个员工都有建设积分和捣乱积分, 他们需要排成一队,在队伍最前面的一定是老板

原创
作者头像
福大大架构师每日一题
发布于 2022-07-01 13:42:52
发布于 2022-07-01 13:42:52
2910
举报

2022-07-01:某公司年会上,大家要玩一食发奖金游戏,一共有n个员工,

每个员工都有建设积分和捣乱积分,

他们需要排成一队,在队伍最前面的一定是老板,老板也有建设积分和捣乱积分,

排好队后,所有员工都会获得各自的奖金,

该员工奖金 = 排在他前面所有人的建设积分乘积 / 该员工自己的捣乱积分,向下取整,

为了公平(放屁),老板希望 : 让获得奖金最高的员工,所获得的奖金尽可能少,

所以想请你帮他重新排一下队伍,返回奖金最高的员工获得的、尽可能少的奖金数额。

快手考试的时候,给定的数据量,全排列的代码也能过的!

1 <= n <= 1000, 1<= 积分 <= 10000;

来自阿里。

答案2022-07-01:

线段树+哈希表+二分法。

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

代码语言:rust
AI代码解释
复制
use rand::Rng;
use std::collections::HashMap;
fn main() {
    let n: isize = 9;
    let v: isize = 50;
    let test_time: i32 = 5000;
    println!("测试开始");
    for i in 0..test_time {
        let a = rand::thread_rng().gen_range(0, v) + 1;
        let b = rand::thread_rng().gen_range(0, v) + 1;
        let len = rand::thread_rng().gen_range(0, n);
        let mut value = random_array(len, v);
        let mut trouble = random_array(len, v);
        let ans1 = most_min1(a, b, &mut value, &mut trouble);
        let ans2 = most_min2(a, b, &mut value, &mut trouble);
        if ans1 != ans2 {
            println!("出错了!{}", i);
            println!("ans1 = {}", ans1);
            println!("ans2 = {}", ans2);
            break;
        }
    }
    println!("测试结束");
}

// 暴力方法
// 为了验证
// a : 老板的贡献积分
// b : 老板的捣乱积分
// value[i] : i号员工的贡献积分
// trouble[i] : i号员工的捣乱积分
// 返回 : 奖金最高的员工获得的、尽可能少的奖金数额
fn most_min1(a: isize, _: isize, value: &mut Vec<isize>, trouble: &mut Vec<isize>) -> isize {
    return process1(a, value, trouble, 0);
}

fn process1(boss: isize, value: &mut Vec<isize>, trouble: &mut Vec<isize>, index: isize) -> isize {
    if index == value.len() as isize {
        let mut value_all = boss;
        let mut ans = 0;
        for i in 0..value.len() as isize {
            ans = get_max(ans, value_all / trouble[i as usize]);
            value_all *= value[i as usize];
        }
        return ans;
    } else {
        let mut ans = 9223372036854775807;
        for i in index..value.len() as isize {
            swap(value, trouble, i, index);
            ans = get_min(ans, process1(boss, value, trouble, index + 1));
            swap(value, trouble, i, index);
        }
        return ans;
    }
}

fn swap(value: &mut Vec<isize>, trouble: &mut Vec<isize>, i: isize, j: isize) {
    let mut tmp = value[i as usize];
    value[i as usize] = value[j as usize];
    value[j as usize] = tmp;
    tmp = trouble[i as usize];
    trouble[i as usize] = trouble[j as usize];
    trouble[j as usize] = tmp;
}

fn get_max<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T {
    if a > b {
        a
    } else {
        b
    }
}

fn get_min<T: Clone + Copy + std::cmp::PartialOrd>(a: T, b: T) -> T {
    if a < b {
        a
    } else {
        b
    }
}

// 正式方法
// 所有员工数量为N
// 假设所有员工建设积分乘起来为M
// 时间复杂度O(N * logN * logM)
fn most_min2(a: isize, _: isize, value: &mut Vec<isize>, trouble: &mut Vec<isize>) -> isize {
    let n = value.len() as isize;
    let mut l = 0;
    let mut r = 0;
    let mut value_all = a;
    let mut staff: Vec<Vec<isize>> = vec![];
    for i in 0..n {
        staff.push(vec![]);
        for _ in 0..2 {
            staff[i as usize].push(0);
        }
    }
    for i in 0..n {
        r = get_max(r, value_all / trouble[i as usize]);
        value_all *= value[i as usize];
        staff[i as usize][0] = value[i as usize] * trouble[i as usize];
        staff[i as usize][1] = value[i as usize];
    }
    staff.sort_by(|x, y| y[0].cmp(&x[0]));
    let mut m = 0;
    let mut ans = 0;
    while l <= r {
        m = l + ((r - l) >> 1);
        if yeah(value_all, &mut staff, m) {
            ans = m;
            r = m - 1;
        } else {
            l = m + 1;
        }
    }
    return ans;
}

// staff长度为N,时间复杂度O(N * logN)
fn yeah(mut all: isize, staff: &mut Vec<Vec<isize>>, limit: isize) -> bool {
    let n = staff.len() as isize;
    let mut st = SegmentTree::new(n);
    let mut map: HashMap<isize, Vec<isize>> = HashMap::new();
    let mut i = 0;
    let mut index: isize = 1;
    while i < n {
        let value = staff[i as usize][1];
        st.update1(index, value);
        if !map.contains_key(&value) {
            map.insert(value, vec![]);
        }
        map.get_mut(&value).unwrap().push(index);
        i += 1;
        index += 1;
    }
    for _ in 0..n {
        let right = boundary(staff, all, limit);
        if right == 0 {
            return false;
        }
        let max = st.max1(right);
        if max == 0 {
            return false;
        }
        let mut temp = map.get_mut(&max).unwrap();
        let index = temp[0];
        temp.remove(0);
        st.update1(index, 0);
        all /= max;
    }
    return true;
}

fn boundary(staff: &mut Vec<Vec<isize>>, all: isize, limit: isize) -> isize {
    let mut l = 0;
    let mut r = staff.len() as isize - 1;
    let mut m = 0;
    let mut ans = -1;
    while l <= r {
        m = l + ((r - l) >> 1);
        if all / staff[m as usize][0] <= limit {
            ans = m;
            l = m + 1;
        } else {
            r = m - 1;
        }
    }
    return ans + 1;
}

pub struct SegmentTree {
    pub n: isize,
    pub max: Vec<isize>,
    pub update: Vec<isize>,
}

impl SegmentTree {
    pub fn new(max_size: isize) -> Self {
        let n = max_size + 1;
        let mut max: Vec<isize> = vec![];
        let mut update: Vec<isize> = vec![];
        for _ in 0..n << 2 {
            max.push(0);
            update.push(-1);
        }
        Self { n, max, update }
    }

    pub fn update1(&mut self, index: isize, c: isize) {
        self.update0(index, index, c, 1, self.n, 1);
    }

    pub fn max1(&mut self, right: isize) -> isize {
        return self.max0(1, right, 1, self.n, 1);
    }

    fn push_up(&mut self, rt: isize) {
        self.max[rt as usize] = get_max(
            self.max[(rt << 1) as usize],
            self.max[(rt << 1 | 1) as usize],
        );
    }

    fn push_down(&mut self, rt: isize, _ln: isize, _rn: isize) {
        if self.update[rt as usize] != -1 {
            self.update[(rt << 1) as usize] = self.update[rt as usize];
            self.max[(rt << 1) as usize] = self.update[rt as usize];
            self.update[(rt << 1 | 1) as usize] = self.update[rt as usize];
            self.max[(rt << 1 | 1) as usize] = self.update[rt as usize];
            self.update[rt as usize] = -1;
        }
    }

    fn update0(&mut self, ll: isize, rr: isize, cc: isize, l: isize, r: isize, rt: isize) {
        if ll <= l && r <= rr {
            self.max[rt as usize] = cc;
            self.update[rt as usize] = cc;
            return;
        }
        let mid = (l + r) >> 1;
        self.push_down(rt, mid - l + 1, r - mid);
        if ll <= mid {
            self.update0(ll, rr, cc, l, mid, rt << 1);
        }
        if rr > mid {
            self.update0(ll, rr, cc, mid + 1, r, rt << 1 | 1);
        }
        self.push_up(rt);
    }

    fn max0(&mut self, ll: isize, rr: isize, l: isize, r: isize, rt: isize) -> isize {
        if ll <= l && r <= rr {
            return self.max[rt as usize];
        }
        let mid = (l + r) >> 1;
        self.push_down(rt, mid - l + 1, r - mid);
        let mut ans = 0;
        if ll <= mid {
            ans = get_max(ans, self.max0(ll, rr, l, mid, rt << 1));
        }
        if rr > mid {
            ans = get_max(ans, self.max0(ll, rr, mid + 1, r, rt << 1 | 1));
        }
        return ans;
    }
}

// 为了测试
fn random_array(n: isize, v: isize) -> Vec<isize> {
    let mut arr: Vec<isize> = vec![];
    for _i in 0..n {
        arr.push(rand::thread_rng().gen_range(0, v) + 1);
    }
    return arr;
}

执行结果如下:

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

左神java代码

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
2022-07-29:一共有n个人,从左到右排列,依次编号0~n-1, h[i]是第i个人的身高, v[i]是第i个人的分数, 要求从左到右选出一个子序列,在这
n <= 10的5次方, 1 <= hi <= 10的9次方, 1 <= vi <= 10的9次方。
福大大架构师每日一题
2022/07/29
3030
2022-07-29:一共有n个人,从左到右排列,依次编号0~n-1, h[i]是第i个人的身高, v[i]是第i个人的分数, 要求从左到右选出一个子序列,在这
2022-08-22:给定一个数组arr,长度为n,最多可以删除一个连续子数组, 求剩下的数组,严格连续递增的子数组最大长度。 n <= 10^6。 来自字节。
2022-08-22:给定一个数组arr,长度为n,最多可以删除一个连续子数组,求剩下的数组,严格连续递增的子数组最大长度。n <= 10^6。来自字节。5.6笔试。答案2022-08-22:动态规划+线段树。代码用rust编写。代码如下:use rand::Rng;fn main() { let n: i32 = 100; let v: i32 = 20; let test_time: i32 = 50000; println!("测试开始"); for _ in 0..te
福大大架构师每日一题
2022/08/22
5340
2022-08-22:给定一个数组arr,长度为n,最多可以删除一个连续子数组, 求剩下的数组,严格连续递增的子数组最大长度。 n <= 10^6。 来自字节。
2022-12-12:有n个城市,城市从0到n-1进行编号。小美最初住在k号城市中 在接下来的m天里,小美每天会收到一个任务 她可以选择完成当天的任务或者放弃该
2022-12-12:有n个城市,城市从0到n-1进行编号。小美最初住在k号城市中
福大大架构师每日一题
2022/12/12
6040
2022-12-12:有n个城市,城市从0到n-1进行编号。小美最初住在k号城市中 在接下来的m天里,小美每天会收到一个任务 她可以选择完成当天的任务或者放弃该
2022-05-10:在字节跳动,大家都使用飞书的日历功能进行会议室的预订,遇到会议高峰时期, 会议室就可能不够用,现在请你实现一个算法,判断预订会议时是否有空
2022-05-10:在字节跳动,大家都使用飞书的日历功能进行会议室的预订,遇到会议高峰时期,
福大大架构师每日一题
2022/05/10
4910
2022-12-14:给定一个正数n, 表示从0位置到n-1位置每个位置放着1件衣服 从0位置到n-1位置不仅有衣服,每个位置还摆着1个机器人 给定两个长度为n
2022-12-14:给定一个正数n, 表示从0位置到n-1位置每个位置放着1件衣服
福大大架构师每日一题
2022/12/14
5120
2022-12-14:给定一个正数n, 表示从0位置到n-1位置每个位置放着1件衣服 从0位置到n-1位置不仅有衣服,每个位置还摆着1个机器人 给定两个长度为n
2022-04-20:小团去参加军训,军训快要结束了, 长官想要把大家一排n个人分成m组,然后让每组分别去参加阅兵仪式, 只能选择相邻的人一组,不能随意改变队伍
2022-04-20:小团去参加军训,军训快要结束了, 长官想要把大家一排n个人分成m组,然后让每组分别去参加阅兵仪式, 只能选择相邻的人一组,不能随意改变队伍中人的位置, 阅兵仪式上会进行打分,其中有一个奇怪的扣分点是每组的最大差值, 即每组最大值减去最小值, 长官想要让这分成的m组总扣分量最小,即这m组分别的极差之和最小。 长官正在思索如何安排中,就让小团来帮帮他吧。 答案2022-04-20: 动态规划。 时间复杂度:O(M N N)。 代码用rust编写。代码如下: use rand::Rng;
福大大架构师每日一题
2022/04/20
1840
2022-07-23:给定N件物品,每个物品有重量(w[i])、有价值(v[i]), 只能最多选两件商品,重量不超过bag,返回价值最大能是多少? N <= 1
N <= 10^5, wi <= 10^5, vi <= 10^5, bag <= 10^5。
福大大架构师每日一题
2022/07/23
1500
2022-07-23:给定N件物品,每个物品有重量(w[i])、有价值(v[i]), 只能最多选两件商品,重量不超过bag,返回价值最大能是多少? N <= 1
2023-01-06:给定一个只由小写字母组成的字符串str,长度为N, 给定一个只由0、1组成的数组arr,长度为N, arr[i] == 0表示str中i位
2023-01-06:给定一个只由小写字母组成的字符串str,长度为N,给定一个只由0、1组成的数组arr,长度为N,arri等于 0 表示str中i位置的字符不许修改,arri 等于 1表示str中i位置的字符允许修改,给定一个正数m,表示在任意允许修改的位置,可以把该位置的字符变成a~z中的任何一个,可以修改m次。返回在最多修改m次的情况下,全是一种字符的最长子串是多长。1 <= N, M <= 10^5,所有字符都是小写。来自字节。答案2023-01-06:尝试全变成a一直到全变成z,遍历26次。每次
福大大架构师每日一题
2023/01/06
1.2K0
2023-01-06:给定一个只由小写字母组成的字符串str,长度为N, 给定一个只由0、1组成的数组arr,长度为N, arr[i] == 0表示str中i位
2022-07-05:给定一个数组,想随时查询任何范围上的最大值。 如果只是根据初始数组建立、并且以后没有修改, 那么RMQ方法比线段树方法好实现,时间复杂度O
那么RMQ方法比线段树方法好实现,时间复杂度O(NlogN),额外空间复杂度O(NlogN)。
福大大架构师每日一题
2022/07/05
5180
2022-07-05:给定一个数组,想随时查询任何范围上的最大值。 如果只是根据初始数组建立、并且以后没有修改, 那么RMQ方法比线段树方法好实现,时间复杂度O
2022-05-31:某公司游戏平台的夏季特惠开始了,你决定入手一些游戏。现在你一共有X元的预算。
2022-05-31:某公司游戏平台的夏季特惠开始了,你决定入手一些游戏。现在你一共有X元的预算。
福大大架构师每日一题
2022/05/31
4940
2022-05-31:某公司游戏平台的夏季特惠开始了,你决定入手一些游戏。现在你一共有X元的预算。
2022-06-09:每个会议给定开始和结束时间, 后面的会议如果跟前面的会议有任何冲突,完全取消冲突的、之前的会议,安排当前的。 给定一个会议数组,返回安排的
2022-06-09:每个会议给定开始和结束时间,后面的会议如果跟前面的会议有任何冲突,完全取消冲突的、之前的会议,安排当前的。给定一个会议数组,返回安排的会议列表。来自通维数码。答案2022-06-09:彻底的流程模拟。线段树。代码用rust编写。代码如下:use rand::Rng;fn main() { let n: i32 = 100; let t: i32 = 5000; let test_time: i32 = 20000; println!("测试开始"); fo
福大大架构师每日一题
2022/06/09
4510
2022-06-09:每个会议给定开始和结束时间, 后面的会议如果跟前面的会议有任何冲突,完全取消冲突的、之前的会议,安排当前的。 给定一个会议数组,返回安排的
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
6660
2022-12-10:给你一个由小写字母组成的字符串 s ,和一个整数 k 如果满足下述条件,则可以将字符串 t 视作是 理想字符串 : t 是字符串 s 的一
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
1780
2022-12-20:二狗买了一些小兵玩具,和大胖一起玩, 一共有n个小兵,这n个小兵拍成一列, 第i个小兵战斗力为hi,然后他们两个开始对小兵进行排列, 一共
2022-07-03:数组里有0和1,一定要翻转一个区间,翻转:0变1,1变0。请问翻转后可以使得1的个数最多是多少?来自小红书
[左神java代码](https://github.com/algorithmzuo/weekly-problems/blob/main/src/class_2022_04_3_week/Code01_MaxOneNumbers.java)
福大大架构师每日一题
2023/06/08
2740
2022-07-03:数组里有0和1,一定要翻转一个区间,翻转:0变1,1变0。请问翻转后可以使得1的个数最多是多少?来自小红书
2022-05-26:void add(int L, int R, int C)代表在arr[L...R]上每个数加C, int get(int L, int
2022-05-26:void add(int L, int R, int C)代表在arrL...R上每个数加C,
福大大架构师每日一题
2022/05/26
1.6K0
2022-05-26:void add(int L, int R, int C)代表在arr[L...R]上每个数加C, int get(int L, int
2022-05-07:返回一个数组中,所有降序三元组的数量。
2022-05-07:返回一个数组中,所有降序三元组的数量。 比如 : {5, 3, 4, 2, 1}, 所有降序三元组为 : {5, 3, 2}、{5, 3, 1}、{5, 4, 2}、{5, 4, 1}、 {5, 2, 1}、{3, 2, 1}、{4, 2, 1}。 所以返回数量7。 答案2022-05-07: 利用index tree。 时间复杂度:O(N * logN)。 空间复杂度:O(N)。 代码用rust编写。代码如下: fn main() { let mut arr: Vec<is
福大大架构师每日一题
2022/05/07
6750
2022-09-21:有n个动物重量分别是a1、a2、a3.....an, 这群动物一起玩叠罗汉游戏, 规定从左往右选择动物,每只动物左边动物的总重量不能超过自
2022-09-21:有n个动物重量分别是a1、a2、a3.....an,这群动物一起玩叠罗汉游戏,规定从左往右选择动物,每只动物左边动物的总重量不能超过自己的重量返回最多能选多少个动物,求一个高效的算法。比如有7个动物,从左往右重量依次为:1,3,5,7,9,11,21则最多能选5个动物:1,3,5,9,21注意本题给的例子是有序的,但是实际给定的动物数组,可能是无序的,要求从左往右选动物,且不能打乱原始数组。答案2022-09-21:联想到最长递增子序列。动态规划+二分。时间复杂度O(N*logN)。额
福大大架构师每日一题
2022/09/21
2950
2022-09-21:有n个动物重量分别是a1、a2、a3.....an, 这群动物一起玩叠罗汉游戏, 规定从左往右选择动物,每只动物左边动物的总重量不能超过自
2022-08-24:给定一个长度为3N的数组,其中最多含有0、1、2三种值, 你可以把任何一个连续区间上的数组,全变成0、1、2中的一种, 目的是让0、1、2
2022-08-24:给定一个长度为3N的数组,其中最多含有0、1、2三种值,你可以把任何一个连续区间上的数组,全变成0、1、2中的一种,目的是让0、1、2三种数字的个数都是N。返回最小的变化次数。来自京东。4.2笔试。答案2022-08-24:自然智慧即可。统计0,1,2扣去N/3的个数之和。比如1,1,1,1有3个,多了两个;而0和2都是0个,不统计;所以结果是2。时间复杂度:O(N)。代码用rust编写。代码如下:use rand::Rng;fn main() { let n: i32 = 8;
福大大架构师每日一题
2022/08/24
8340
2022-08-24:给定一个长度为3N的数组,其中最多含有0、1、2三种值, 你可以把任何一个连续区间上的数组,全变成0、1、2中的一种, 目的是让0、1、2
2022-07-21:给定一个字符串str,和一个正数k, 你可以随意的划分str成多个子串, 目的是找到在某一种划分方案中,有尽可能多的回文子串,长度>=k,
2022-07-21:给定一个字符串str,和一个正数k,你可以随意的划分str成多个子串,目的是找到在某一种划分方案中,有尽可能多的回文子串,长度>=k,并且没有重合。返回有几个回文子串。来自optiver。答案2022-07-21:马拉车算法+贪心。代码用rust编写。代码如下:use rand::Rng;fn main() { let n: i32 = 20; let r = 3; let test_time: i32 = 50000; println!("测试开始");
福大大架构师每日一题
2022/07/21
5020
2022-07-21:给定一个字符串str,和一个正数k, 你可以随意的划分str成多个子串, 目的是找到在某一种划分方案中,有尽可能多的回文子串,长度>=k,
2023-01-04:有三个题库A、B、C,每个题库均有n道题目,且题目都是从1到n进行编号 每个题目都有一个难度值 题库A中第i个题目的难度为ai 题库B中第
2023-01-04:有三个题库A、B、C,每个题库均有n道题目,且题目都是从1到n进行编号
福大大架构师每日一题
2023/01/04
4520
2023-01-04:有三个题库A、B、C,每个题库均有n道题目,且题目都是从1到n进行编号 每个题目都有一个难度值 题库A中第i个题目的难度为ai 题库B中第
推荐阅读
2022-07-29:一共有n个人,从左到右排列,依次编号0~n-1, h[i]是第i个人的身高, v[i]是第i个人的分数, 要求从左到右选出一个子序列,在这
3030
2022-08-22:给定一个数组arr,长度为n,最多可以删除一个连续子数组, 求剩下的数组,严格连续递增的子数组最大长度。 n <= 10^6。 来自字节。
5340
2022-12-12:有n个城市,城市从0到n-1进行编号。小美最初住在k号城市中 在接下来的m天里,小美每天会收到一个任务 她可以选择完成当天的任务或者放弃该
6040
2022-05-10:在字节跳动,大家都使用飞书的日历功能进行会议室的预订,遇到会议高峰时期, 会议室就可能不够用,现在请你实现一个算法,判断预订会议时是否有空
4910
2022-12-14:给定一个正数n, 表示从0位置到n-1位置每个位置放着1件衣服 从0位置到n-1位置不仅有衣服,每个位置还摆着1个机器人 给定两个长度为n
5120
2022-04-20:小团去参加军训,军训快要结束了, 长官想要把大家一排n个人分成m组,然后让每组分别去参加阅兵仪式, 只能选择相邻的人一组,不能随意改变队伍
1840
2022-07-23:给定N件物品,每个物品有重量(w[i])、有价值(v[i]), 只能最多选两件商品,重量不超过bag,返回价值最大能是多少? N <= 1
1500
2023-01-06:给定一个只由小写字母组成的字符串str,长度为N, 给定一个只由0、1组成的数组arr,长度为N, arr[i] == 0表示str中i位
1.2K0
2022-07-05:给定一个数组,想随时查询任何范围上的最大值。 如果只是根据初始数组建立、并且以后没有修改, 那么RMQ方法比线段树方法好实现,时间复杂度O
5180
2022-05-31:某公司游戏平台的夏季特惠开始了,你决定入手一些游戏。现在你一共有X元的预算。
4940
2022-06-09:每个会议给定开始和结束时间, 后面的会议如果跟前面的会议有任何冲突,完全取消冲突的、之前的会议,安排当前的。 给定一个会议数组,返回安排的
4510
2022-12-10:给你一个由小写字母组成的字符串 s ,和一个整数 k 如果满足下述条件,则可以将字符串 t 视作是 理想字符串 : t 是字符串 s 的一
6660
2022-12-20:二狗买了一些小兵玩具,和大胖一起玩, 一共有n个小兵,这n个小兵拍成一列, 第i个小兵战斗力为hi,然后他们两个开始对小兵进行排列, 一共
1780
2022-07-03:数组里有0和1,一定要翻转一个区间,翻转:0变1,1变0。请问翻转后可以使得1的个数最多是多少?来自小红书
2740
2022-05-26:void add(int L, int R, int C)代表在arr[L...R]上每个数加C, int get(int L, int
1.6K0
2022-05-07:返回一个数组中,所有降序三元组的数量。
6750
2022-09-21:有n个动物重量分别是a1、a2、a3.....an, 这群动物一起玩叠罗汉游戏, 规定从左往右选择动物,每只动物左边动物的总重量不能超过自
2950
2022-08-24:给定一个长度为3N的数组,其中最多含有0、1、2三种值, 你可以把任何一个连续区间上的数组,全变成0、1、2中的一种, 目的是让0、1、2
8340
2022-07-21:给定一个字符串str,和一个正数k, 你可以随意的划分str成多个子串, 目的是找到在某一种划分方案中,有尽可能多的回文子串,长度>=k,
5020
2023-01-04:有三个题库A、B、C,每个题库均有n道题目,且题目都是从1到n进行编号 每个题目都有一个难度值 题库A中第i个题目的难度为ai 题库B中第
4520
相关推荐
2022-07-29:一共有n个人,从左到右排列,依次编号0~n-1, h[i]是第i个人的身高, v[i]是第i个人的分数, 要求从左到右选出一个子序列,在这
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档