2022-05-24:有一块10000 * 10000 * 10000的立方体豆腐, 豆腐的前左下角放在(0,0,0)点,豆腐的后右上角放在(10000,10000,10000)点。 下面给出切法的数

Posted 福大大架构师每日一题

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2022-05-24:有一块10000 * 10000 * 10000的立方体豆腐, 豆腐的前左下角放在(0,0,0)点,豆腐的后右上角放在(10000,10000,10000)点。 下面给出切法的数相关的知识,希望对你有一定的参考价值。

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编写。代码如下:

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
    


执行结果如下:


左神java代码

以上是关于2022-05-24:有一块10000 * 10000 * 10000的立方体豆腐, 豆腐的前左下角放在(0,0,0)点,豆腐的后右上角放在(10000,10000,10000)点。 下面给出切法的数的主要内容,如果未能解决你的问题,请参考以下文章

C # 整理 2022/05/24:

C # 整理 2022/05/24:

性能测试中,如何把系统 TPS 从 100 提高到 10000?

我怎样才能从 10 中获得 10000,1000,100 最简单的方法

Facebook requestwithgraphpath 错误 > facebookErrDomain Code=10000 “操作无法完成。(facebookErrDomain 错误 100

10000的阶乘有多大