Java 数组原地变换:按中位索引规则重写前半部分元素

浅静大大_9801

浅静大大_9801

2026-05-09

995人浏览

原创

Java 数组原地变换:按中位索引规则重写前半部分元素

本文详解如何在不创建新数组的前提下,直接修改原始整型数组——以前半段元素与右侧对称位置元素相加的结果覆盖原位置,后半段保持不变,最终实现原地更新并正确输出目标序列。

本文详解如何在不创建新数组的前提下,直接修改原始整型数组——以前半段元素与右侧对称位置元素相加的结果覆盖原位置,后半段保持不变,最终实现原地更新并正确输出目标序列。

在 Java 中,数组是引用类型,方法参数传递的是数组对象的引用(即内存地址),因此对形参数组的修改会直接影响原始数组。这一特性使得“原地更新”成为可能,无需额外空间复制或构造新数组。

题目要求对 int[] arr = {1, 2, 3, 4, 5} 进行如下变换:

  • 数组长度为 5,中间元素索引为 length / 2 = 2,对应值 arr[2] = 3;
  • 注意关键逻辑澄清:题干中“arr[0] + arr[3]”“arr[1] + arr[4]”实际隐含的是以中间索引为基准向右偏移 i 的位置,即 arr[i] + arr[midIndex + i + 1]?但结合示例 1+4=5、2+5=7 及输出 [5,7,3,4,5],可明确推导出:
    • midIndex = 2(0-based),则 arr[0] 对应 arr[3] = arr[midIndex + 1],arr[1] 对应 arr[4] = arr[midIndex + 2];
    • 即对前 midIndex 个元素(索引 0 到 midIndex-1),将其与 arr[midIndex + 1 + i] 相加,并将结果写回 arr[i]。

但更简洁且符合代码实现的规律是:前半段(不含中位)共 len/2 个元素,分别与从 midIndex + 1 开始的连续元素配对相加。本例中 len=5 → len/2 = 2,故 i ∈ [0, 1],对应加数索引为 3 和 4,即 arr[i] + arr[i + 3] —— 而 3 = midIndex + 1。因此通用公式为:

JavaStoryDevelop
JavaStoryDevelop

你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在

下载
int midIndex = arr.length / 2;
arr[i] = arr[i] + arr[i + midIndex + 1]; // 仅适用于奇数长度且 i <p>不过,观察提供的参考答案,其逻辑实为:<br>
✅ <strong>直接利用 arr.length / 2 计算中位索引(整除),前 len/2 个位置(i = 0, 1)分别与 arr[i + (midIndex + 1)] 相加</strong>,即 i + 3 和 i + 4,恰好匹配示例。</p><p>以下是规范、健壮的实现(支持任意奇数长度数组,已添加注释与格式优化):</p><pre class="brush:php;toolbar:false;">public class ArrayTransform {
    static void transformAndPrint(int[] arr) {
        int len = arr.length;
        int midIndex = len / 2; // 中位索引(0-based,奇数长度时指向正中)

        // 步骤1:更新前半段(索引 0 到 midIndex-1)
        for (int i = 0; i <p><strong>关键注意事项:</strong>  </p>
  • ✅ 原地修改安全:因 Java 数组传引用,transformAndPrint(arr) 内部对 arr[i] 的赋值直接改变原始数组内容;
  • ⚠️ 长度兼容性:当前逻辑针对奇数长度数组(如 5、7、9…),确保存在唯一中位索引。若需支持偶数长度,需明确定义“中间”的处理规则(如取左中位或右中位);
  • ? 边界防护:代码中添加了 if (rightIndex
  • ? 编码规范:采用 int[] arr 声明风格(而非 int arr[]),变量就近声明,缩进统一,符合 Java 社区最佳实践。

通过此方案,你不仅能精准生成 [5, 7, 3, 4, 5],更能掌握 Java 数组原地变换的核心思想——善用引用传递特性,以最小空间开销完成数据重构。

Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南

相关专题

更多
java
java

Java是一个通用术语,用于表示Java软件及其组件,包括“Java运行时环境 (JRE)”、“Java虚拟机 (JVM)”以及“插件”。php中文网还为大家带了Java相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.15

10897

6

java正则表达式语法
java正则表达式语法

java正则表达式语法是一种模式匹配工具,它非常有用,可以在处理文本和字符串时快速地查找、替换、验证和提取特定的模式和数据。本专题提供java正则表达式语法的相关文章、下载和专题,供大家免费下载体验。

2023.07.05

8002

9

java自学难吗
java自学难吗

Java自学并不难。Java语言相对于其他一些编程语言而言,有着较为简洁和易读的语法,本专题为大家提供java自学难吗相关的文章,大家可以免费体验。

2023.07.31

6952

8

java配置jdk环境变量
java配置jdk环境变量

Java是一种广泛使用的高级编程语言,用于开发各种类型的应用程序。为了能够在计算机上正确运行和编译Java代码,需要正确配置Java Development Kit(JDK)环境变量。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.01

1164

3

java保留两位小数
java保留两位小数

Java是一种广泛应用于编程领域的高级编程语言。在Java中,保留两位小数是指在进行数值计算或输出时,限制小数部分只有两位有效数字,并将多余的位数进行四舍五入或截取。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

2023.08.02

948

3

java基本数据类型
java基本数据类型

java基本数据类型有:1、byte;2、short;3、int;4、long;5、float;6、double;7、char;8、boolean。本专题为大家提供java基本数据类型的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

1416

5

java有什么用
java有什么用

java可以开发应用程序、移动应用、Web应用、企业级应用、嵌入式系统等方面。本专题为大家提供java有什么用的相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.02

2869

5

java在线网站
java在线网站

Java在线网站是指提供Java编程学习、实践和交流平台的网络服务。近年来,随着Java语言在软件开发领域的广泛应用,越来越多的人对Java编程感兴趣,并希望能够通过在线网站来学习和提高自己的Java编程技能。php中文网给大家带来了相关的视频、教程以及文章,欢迎大家前来学习阅读和下载。

2023.08.03

20151

3

配置java环境变量
配置java环境变量

配置Java环境变量是为了让操作系统能够识别和使用Java的相关命令和功能。本专题为大家提供配置java环境变量相关文章,帮助大家解决问题。

2023.08.03

1255

8

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
dev.java 官方:Learn Java
dev.java 官方:Learn Java

共0课时 | 0人学习

Java JDBC数据库连接官方教程
Java JDBC数据库连接官方教程

共0课时 | 0人学习