需要面试准备
实现 solution(values: list[list[float | None]], n_buckets: int) -> list[list[int]]。输入 values 是形状为 (T, N) 的横截面因子分数矩阵:T 个时间戳作为行,N 个标的作为列。对每一行,给所有非缺失分数赋一个序数排名(取值范围 {1, ..., N_valid},其中 N_valid 为该行的非缺失个数,最小者排名为 1、最大者排名为 N_valid),再用 bucket = ceil(rank * n_buckets / N_valid) 把每个排名映射到桶号 {1, ..., n_buckets}。桶 1 为最低分组;桶 n_buckets 为最高分组。