前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2022-05-24:有一块10000 * 10000 * 10000的立方体豆腐, 豆腐的前左下角放在(0,0,0)点,豆腐的后右上角放在(10000,100

2022-05-24:有一块10000 * 10000 * 10000的立方体豆腐, 豆腐的前左下角放在(0,0,0)点,豆腐的后右上角放在(10000,100

原创
作者头像
福大大架构师每日一题
发布2022-05-24 21:22:37
2240
发布2022-05-24 21:22:37
举报
文章被收录于专栏:福大大架构师每日一题

2022-05-24:有一块10000 10000 10000的立方体豆腐,

豆腐的前左下角放在(0,0,0)点,豆腐的后右上角放在(10000,10000,10000)点。

下面给出切法的数据结构:

a,b,

a = 1,表示x = b处,一把无穷大的刀平行于yz面贯穿豆腐切过去;

a = 2,表示y = b处,一把无穷大的刀平行于xz面贯穿豆腐切过去;

a = 3,表示z = b处,一把无穷大的刀平行于xy面贯穿豆腐切过去;

a = 1 or 2 or 3,0<=b<=10000。

给定一个n*2的二维数组,表示切了n刀。

返回豆腐中最大的一块体积是多少?

来自美团。

答案2022-05-24:

这道题看起来很难,实际上很简单。

x最大长度y最大长度z最大长度。分别求x,y,z的最大长度,结果就能计算出来了。

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

代码语言:rust
复制
fn main() {
    let mut cuts: Vec<Vec<i32>> = vec![vec![1, 3000] , vec![2, 3], vec![3, 3]];
    let ans = max_cut(&mut cuts);
    println!("ans = {}", ans);
}

fn max_cut(cuts: &mut Vec<Vec<i32>>) -> i64 {
    if cuts.len() == 0 {
        return 10000 * 10000 * 10000;
    }
    // // 0 类型
    // 1 切哪了
    //Arrays.sort(cuts, (a, b) -> a[0] != b[0] ? (a[0] - b[0]) : (a[1] - b[1]));
    cuts.sort_by(|a, b| {
        if a[0] < b[0] {
            std::cmp::Ordering::Less
        } else if a[0] > b[0] {
            std::cmp::Ordering::Greater
        } else {
            if a[1] < b[1] {
                std::cmp::Ordering::Less
            } else if a[1] > b[1] {
                std::cmp::Ordering::Greater
            } else {
                std::cmp::Ordering::Equal
            }
        }
    });
    let n = cuts.len() as i32;
    let mut i: i32 = 0;
    let mut x_max_diff: i32 = 0;
    let mut pre: i32 = 0;

    while i < n && cuts[i as usize][0] == 1 {
        x_max_diff = get_max(x_max_diff, cuts[i as usize][1] - pre);
        pre = cuts[i as usize][1];
        i += 1;
    }
    x_max_diff = get_max(x_max_diff, 10000 - pre);
    let mut y_max_diff: i32 = 0;
    pre = 0;
    while i < n && cuts[i as usize][0] == 2 {
        y_max_diff = get_max(y_max_diff, cuts[i as usize][1] - pre);
        pre = cuts[i as usize][1];
        i += 1;
    }
    y_max_diff = get_max(y_max_diff, 10000 - pre);
    let mut z_max_diff: i32 = 0;
    pre = 0;
    while i < n && cuts[i as usize][0] == 3 {
        z_max_diff = get_max(z_max_diff, cuts[i as usize][1] - pre);
        pre = cuts[i as usize][1];
        i += 1;
    }
    z_max_diff = get_max(z_max_diff, 10000 - pre);
    return x_max_diff as i64 * y_max_diff as i64 * z_max_diff as i64;
}

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

执行结果如下:

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

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

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

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

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

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