You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Codefights题目“Digit Difference Sort”求解咨询

解决Codefights的Digit Difference Sort任务

我来帮你搞定这个排序任务~先把问题再理清楚:

给定一个整数数组,按以下规则排序:

  1. 优先按元素的最大数字与最小数字的差值从小到大排列
  2. 若两个元素的差值相同,原数组中索引更大的元素排在前面

举个题目里的例子:
输入 a = [152, 23, 7, 887, 243],各元素的差值分别是:

  • 152:5-1=4
  • 23:3-2=1
  • 7:7-7=0
  • 887:8-7=1
  • 243:4-2=2
    按照规则排序后输出就是 [7, 887, 23, 243, 152]

解题思路

核心就是给每个元素绑定两个关键信息:它的数字差值,以及它在原数组里的索引。排序的时候先按差值升序排,差值一样的话就按索引降序排(因为索引大的要靠前)。

Python 实现代码

def digitDifferenceSort(a):
    # 辅助函数:计算单个数字的最大最小差值
    def calculate_difference(num):
        digits = [int(d) for d in str(num)]
        return max(digits) - min(digits)
    
    # 把每个元素和它的差值、原索引打包成元组
    elements_with_info = [(num, calculate_difference(num), idx) for idx, num in enumerate(a)]
    
    # 自定义排序规则:先按差值升序,再按索引的负值升序(等价于索引降序)
    elements_with_info.sort(key=lambda x: (x[1], -x[2]))
    
    # 提取排序后的数字列表
    return [item[0] for item in elements_with_info]

# 测试示例
test_a = [152, 23, 7, 887, 243]
print(digitDifferenceSort(test_a))  # 输出: [7, 887, 23, 243, 152]

代码解释

  1. calculate_difference函数:把数字转成字符串后拆成单个数字的整数列表,直接用max和min计算差值,简单直观。
  2. 打包元组:用enumerate拿到原索引,这样排序时能记住每个元素的原始位置。
  3. 排序逻辑:sort方法的key参数里,第一个元素是差值(升序),第二个是索引的负值——因为默认排序是升序,负索引大的元素会排在前面,刚好满足“索引大的优先”的要求。
  4. 最后只提取排序后的数字,就是我们要的结果啦~

内容的提问来源于stack exchange,提问作者Glitch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 07:40:01