仅对三位数字数组的中间位数字排序的单数组实现问询
单数组内实现三位数字的中间位排序
核心思路是提取所有中间位数字排序后,原地替换回原数组,全程不需要额外的结果数组,直接修改输入数组完成需求。
实现步骤
- 提取数组中每个三位数字的中间位:通过
数字 // 10 % 10(Python)或数字 / 10 % 10(Java)的算术操作,比如540//10%10可得到中间位4。 - 对提取出的中间位数字进行排序。
- 遍历原数组,将每个数字的中间位替换为排序后的对应值:通过
原数字 - 原中间位*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
相关产品推荐
相关产品推荐

