前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022-06-15:薯队长最近在参加了一个活动,主办方提供了N个礼物以供挑选,每个礼物有一个价值,范围在0 ~ 10^9之间,

2022-06-15:薯队长最近在参加了一个活动,主办方提供了N个礼物以供挑选,每个礼物有一个价值,范围在0 ~ 10^9之间,

作者头像
福大大架构师每日一题
发布2023-06-08 14:32:59
1550
发布2023-06-08 14:32:59
举报
文章被收录于专栏:福大大架构师每日一题

2022-06-15:薯队长最近在参加了一个活动,主办方提供了N个礼物以供挑选,

每个礼物有一个价值,范围在0 ~ 10^9之间,

薯队长可以从中挑选k个礼物。

返回:其中价值最接近的两件礼物之间相差值尽可能大的结果。

小红书第二题。

薯队长最近在玩一个游戏,这个游戏桌上会有一排不同颜色的方块,

每次薯队长可以选择一个方块,便可以消除这个方块以及和他左右相临的

若干的颜色相同的方块,而每次消除的方块越多,得分越高。

具体来说,桌上有以个方块排成一排 (1 <= N <= 200),

每个方块有一个颜色,用1~N之间的一个整数表示,相同的数宇代表相同的颜色,

每次消除的时候,会把连续的K个相同颜色的方块消除,并得到K*K的分数,

直到所有方块都消除。显然,不同的消除顺序得分不同,薯队长希望您能告诉他,这个游戏最多能得到多少分。

小红书第三题。

答案2022-06-15:

二分答案法。

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

代码语言:javascript
复制
fn main() {
    let mut nums: Vec<i32> = vec![6, 19, 3, 8, 29];
    let ans = max_near(&mut nums, 3);
    println!("ans = {}", ans);
}

fn max_near(arr: &mut Vec<i32>, k: i32) -> i32 {
    if (arr.len() as i32) < k {
        return -1;
    }
    arr.sort();
    let n = arr.len() as i32;
    let mut l = 0;
    let mut r = arr[(n - 1) as usize] - arr[0];
    let mut m = 0;
    let mut ans = 0;
    while l <= r {
        m = (l + r) / 2;
        if yeah(arr, k, m) {
            ans = m;
            l = m + 1;
        } else {
            r = m - 1;
        }
    }
    return ans;
}

fn yeah(arr: &mut Vec<i32>, k: i32, limit: i32) -> bool {
    let mut last = arr[0];
    let mut pick = 1;
    for i in 1..arr.len() as i32 {
        if arr[i as usize] - last >= limit {
            pick += 1;
            last = arr[i as usize];
        }
    }
    return pick >= k;
}

执行结果如下:

***

[左神java代码](https://github.com/algorithmzuo/weekly-problems/blob/main/src/class_2022_04_1_week/Code06_TopMinSubsquenceSum.java)

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-06-15,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 福大大架构师每日一题 微信公众号,前往查看

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

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档