面试题答案
一键面试- 实现思路:
- 首先,遍历二维数组的每一行。
- 对于每一行,计算该行元素的总和,并通过总和除以该行元素数量得到平均值。
- 然后,再次遍历该行元素,判断每个元素是否大于该行的平均值。如果是,则增加满足条件元素的计数器。
- 代码实现:
fn main() {
let matrix = vec![
vec![1, 3, 5],
vec![2, 4, 6],
vec![7, 8, 9]
];
let mut count = 0;
for row in &matrix {
let sum: i32 = row.iter().sum();
let avg = sum as f32 / row.len() as f32;
for &num in row {
if num as f32 > avg {
count += 1;
}
}
}
println!("满足条件的元素数量: {}", count);
}
- 优化思路及代码:
- 优化思路:上述代码每次都计算整行的平均值,这在某些情况下可能效率不高。可以在遍历行元素时,同时计算总和和满足条件的元素数量,最后再判断是否满足条件。
- 优化后代码:
fn main() {
let matrix = vec![
vec![1, 3, 5],
vec![2, 4, 6],
vec![7, 8, 9]
];
let mut count = 0;
for row in &matrix {
let mut sum = 0;
let mut local_count = 0;
for &num in row {
sum += num;
local_count += (num as f32 > (sum as f32 / (local_count + 1) as f32)) as i32;
}
count += local_count;
}
println!("满足条件的元素数量: {}", count);
}
这样,在遍历过程中就可以实时判断元素是否满足条件,减少了一次对整行的遍历操作,提高了效率。