最大可整除对(排序 + 扫描)
Largest Divisible Pair (Sort + Scan)
开始编码给一个正整数列表 nums(1 ≤ N ≤ 1000,nums[i] ∈ [1, 10⁴])。返回 nums 中最大的那个 a,要求存在另一个不同下标的元素 b(数值可以相等,只要下标不同),使得 a % b == 0,即 b 能整除 a。如果不存在这样的配对,返回 -1。
干净的做法是把 nums 降序排序进 s,让 i 从 0 起走。对每个候选 a = s[i],让 j 从 i + 1 跑到 n - 1,检查 a % s[j] == 0;只要任何 s[j] 能整除 a,立即返回 a——降序遍历保证此后再无更大候选。因为在降序数组里 j > i 推出 s[j] ≤ a,这正好是需要的除数候选集。N ≤ 1000 时内层循环最多约 10⁶ 次取模,远在 2 秒预算内,所以 O(N²) 暴力就是正解;不需要堆、筛法或预算因子表。
Examples
solution([3, 9, 6, 2, 15]) 返回 15。降序排序:[15, 9, 6, 3, 2]。从 a = 15 开始扫尾巴 [9, 6, 3, 2]。15 % 9 = 6,15 % 6 = 3,15 % 3 = 0 —— 命中。返回 15。降序遍历保证这是最优解:nums 里没有比 15 更大的元素。
solution([3, 5, 7]) 返回 -1。降序:[7, 5, 3]。a = 7:7 % 5 = 2,7 % 3 = 1,未命中。a = 5:5 % 3 = 2,未命中。a = 3:尾巴为空。这三个质数两两互素,没有任何一个能被另一个整除,答案是 -1。
solution([4, 4]) 返回 4。两个不同下标都装着 4。降序:[4, 4]。a = s[0] = 4:j = 1,s[1] = 4,4 % 4 = 0 —— 命中。返回 4。注意题目要求的是「列表里另一个元素」(即另一个下标),而不是「数值不同」,所以重复值天然合法。
签名见 stubs/stub.py。
Practical context
「最大的、可被列表里某个其它元素整除的元素」这种形态在微观结构里的批量定单和库存分桶里很常见——做单量、最小手数、可拆分单位都得是交易所最小撮合单位的整数倍。当一个交易场所发布它允许的手数序列(整手、半手、零股、可成对头寸大小),或库存系统跟踪托盘/箱/内盒的数量时,你常需要知道哪个单位是最大的、可以再向下整数倍拆成另一个允许单位的——也就是最大的 a,存在更小的 b 整除 a。这告诉你:「最大」的可拆分单位是哪一个,从而把母单切成合规子单、把零股残量打包回整手、或者识别报价手数到底是不是最小增量的整数倍(还是会留下尾巴)。先降序排序再在第一次命中时短路,正是这种语义需要的形状:你要的是「最大」的可拆分单位,不是全部;常数也很小(一个场所允许的手数表通常就是几十条),O(N²) 暴力既最快写出来也容易审计。同样的形状可以推广到货币面额拆分(哪张最大面额的钞票是某张更小面额的整数倍)、以及碎片化市场里 tick-size 的层级关系。
约束条件
- 1 ≤ N ≤ 1000,N = len(nums)
- 1 ≤ nums[i] ≤ 10^4
- 若不存在合法的 (a, b),返回 -1
- 允许重复值;只要下标不同就算合法配对
样例
Case 1 · typical: mixed values with clear divisor
输入: [[3,9,6,2,15]]
期望: 15
降序排序后是 [15, 9, 6, 3, 2]。从最大的 15 开始检查:15 % 3 == 0,存在更小的 3 整除它,所以答案是 15。
Case 2 · no-pair: pairwise coprime primes
输入: [[3,5,7]]
期望: -1
三个互不整除的质数,任何一个都无法被列表中其它元素整除,所以返回 -1。
Case 3 · with-duplicates: equal values count as distinct indices
输入: [[4,4]]
期望: 4
两个 4 占据不同的下标(互为不同的元素实例),4 % 4 == 0 成立,所以最大的 a 是 4。
最近提交
还没有提交记录。
编码区
实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
Case 1 · typical: mixed values with clear divisor
输入: [[3,9,6,2,15]]
期望: 15
降序排序后是 [15, 9, 6, 3, 2]。从最大的 15 开始检查:15 % 3 == 0,存在更小的 3 整除它,所以答案是 15。
Case 2 · no-pair: pairwise coprime primes
输入: [[3,5,7]]
期望: -1
三个互不整除的质数,任何一个都无法被列表中其它元素整除,所以返回 -1。
Case 3 · with-duplicates: equal values count as distinct indices
输入: [[4,4]]
期望: 4
两个 4 占据不同的下标(互为不同的元素实例),4 % 4 == 0 成立,所以最大的 a 是 4。