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
执行结果如下:
以上是关于2022-05-24:有一块10000 * 10000 * 10000的立方体豆腐, 豆腐的前左下角放在(0,0,0)点,豆腐的后右上角放在(10000,10000,10000)点。 下面给出切法的数的主要内容,如果未能解决你的问题,请参考以下文章
性能测试中,如何把系统 TPS 从 100 提高到 10000?
我怎样才能从 10 中获得 10000,1000,100 最简单的方法
Facebook requestwithgraphpath 错误 > facebookErrDomain Code=10000 “操作无法完成。(facebookErrDomain 错误 100