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

仅对三位数字数组的中间位数字排序的单数组实现问询

单数组内实现三位数字的中间位排序

核心思路是提取所有中间位数字排序后,原地替换回原数组,全程不需要额外的结果数组,直接修改输入数组完成需求。

实现步骤

  1. 提取数组中每个三位数字的中间位:通过数字 // 10 % 10(Python)或数字 / 10 % 10(Java)的算术操作,比如540//10%10可得到中间位4。
  2. 对提取出的中间位数字进行排序。
  3. 遍历原数组,将每个数字的中间位替换为排序后的对应值:通过原数字 - 原中间位*10 + 新中间位*10的计算,只修改中间位,保留首尾位不变。

Python 代码示例

nums = [540, 984, 902]

# 提取并排序中间位数字
sorted_middles = sorted(num // 10 % 10 for num in nums)

# 原地替换回原数组
for idx in range(len(nums)):
    original_mid = nums[idx] // 10 % 10
    nums[idx] = nums[idx] - original_mid * 10 + sorted_middles[idx] * 10

print(nums)  # 输出: [500, 944, 982]

Java 代码示例

public class MiddleDigitSort {
    public static void main(String[] args) {
        int[] nums = {540, 984, 902};
        
        // 提取中间位数字
        int[] middleDigits = new int[nums.length];
        for (int i = 0; i < nums.length; i++) {
            middleDigits[i] = nums[i] / 10 % 10;
        }
        // 排序中间位
        java.util.Arrays.sort(middleDigits);
        
        // 原地替换中间位
        for (int i = 0; i < nums.length; i++) {
            int originalMid = nums[i] / 10 % 10;
            nums[i] = nums[i] - originalMid * 10 + middleDigits[i] * 10;
        }
        
        // 打印结果
        for (int num : nums) {
            System.out.print(num + " "); // 输出: 500 944 982
        }
    }
}

说明

这里用到的临时数组仅用于存储中间位数字,最终结果直接修改原数组完成,完全符合“单数组完成中间位修改”的要求。如果追求极端无临时数组的实现,可以在原数组上对中间位做原地排序,但会大幅增加代码复杂度,日常开发中上述方案更简洁高效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 15:35:46