面试题答案
一键面试fn count_specific_permissions(data: &[u64], specific_permissions: u64) -> u32 {
data.iter().filter(|&num| (*num & specific_permissions) == specific_permissions).count() as u32
}
时间复杂度
假设数组长度为 n
,遍历数组一次,每次遍历进行一次位运算和一次比较,因此时间复杂度为 $O(n)$。
空间复杂度
算法中除了输入的数组外,只使用了常数级别的额外空间,所以空间复杂度为 $O(1)$。
使用时,例如:
fn main() {
let data = [0b101010101010101010101010101010101010101010101010101010101010101010,
0b000000000000000000000000000000000000000000000000000000000000000001,
0b000001000000000000000000000000000000000000000000000000000000000000,
0b000000000000000000000000000000000000000000000000000000000000000001,
0b100000000000000000000000000000000000000000000000000000000000000001];
let specific_permissions = 0b000000000000000000000000000000000000000000000000000000000000000001;
let count = count_specific_permissions(&data, specific_permissions);
println!("具有特定权限组合的数据数量: {}", count);
}
这里通过 count_specific_permissions
函数来统计具有特定权限组合的数据数量,specific_permissions
通过位运算来表示需要匹配的特定权限组合。