前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022-04-15:给定一个非负数组arr,学生依次坐在0~N-1位置,每个值表示学生的安静值, 如果在i位置安置插班生,那么

2022-04-15:给定一个非负数组arr,学生依次坐在0~N-1位置,每个值表示学生的安静值, 如果在i位置安置插班生,那么

作者头像
福大大架构师每日一题
发布2022-06-04 10:32:09
2840
发布2022-06-04 10:32:09
举报

2022-04-15:给定一个非负数组arr,学生依次坐在0~N-1位置,每个值表示学生的安静值,

如果在i位置安置插班生,那么i位置的安静值变成0,同时任何同学都会被影响到而减少安静值,

同学安静值减少的量: N - 这个同学到插班生的距离,

但是减到0以下的话,当做0处理。

返回一个和arr等长的ans数组,ans[i]表示如果把插班生安排在i位置,所有学生的安静值的和。

比如 : arr = {3,4,2,1,5},应该返回{4,3,2,3,4}。

比如 : arr = {10,1,10,10,10},应该返回{24,27,20,20,22}。

arr长度 <= 10^5。

arr中值 <= 2 * 10^5。

答案2022-04-15:

具体见代码。

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

代码语言:javascript
复制
fn main() {
    let arr: Vec<isize> = vec![3, 4, 2, 1, 5];
    let ret: Vec<isize> = quiet1(arr);
    println!("{:?}", ret);
}

fn quiet1(arr: Vec<isize>) -> Vec<isize> {
    if arr.len() == 0 {
        let right: Vec<isize> = Vec::new();
        return right;
    }
    let n = arr.len() as isize;
    let mut ans: Vec<isize> = Vec::new();
    for i in 0..n {
        ans.push(0);
    }
    for i in 0..n {
        let mut sum: isize = 0;
        for j in 0..i {
            sum += get_max(0, arr[j as usize] - (n - abs(i - j)));
        }
        for j in i + 1..n {
            sum += get_max(0, arr[j as usize] - (n - abs(i - j)));
        }
        ans[i as usize] = sum;
    }
    return ans;
}

fn get_max(a: isize, b: isize) -> isize {
    if a > b {
        a
    } else {
        b
    }
}

fn abs(a: isize) -> isize {
    if a < 0 {
        -a
    } else {
        a
    }
}

运行结果如下:

***

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

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

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

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

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

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