当前位置: 首页 > news >正文

JAVA经典百题之数组逆序输出

题目:将一个数组逆序输出。

程序分析

要将一个数组逆序输出,即将数组中的元素顺序颠倒过来,可以使用多种方法。基本思路是创建一个新数组或修改原数组,将元素的顺序颠倒。

方法1: 创建新数组实现

思路

  1. 创建一个新的数组,长度与原数组相同。
  2. 使用两个指针,一个指向原数组的起始位置,另一个指向新数组的末尾位置。
  3. 从原数组中逐个取出元素,将其放入新数组对应的位置,并更新指针位置。
  4. 重复步骤3,直到原数组的所有元素都被放入新数组。
  5. 最终得到新数组,其中的元素顺序为逆序。

代码

public static int[] reverseArray(int[] arr) {int length = arr.length;int[] reversedArr = new int[length];int newIndex = 0;for (int i = length - 1; i >= 0; i--) {reversedArr[newIndex] = arr[i];newIndex++;}return reversedArr;
}

优点

  • 不修改原数组,生成新的逆序数组。
  • 算法简单,易于理解。

缺点

  • 需要额外的内存空间来存储新数组。

方法2: 修改原数组实现

思路

  1. 使用两个指针,一个指向原数组的起始位置,另一个指向原数组的末尾位置。
  2. 交换这两个指针所指向的元素。
  3. 将起始指针向后移动,将末尾指针向前移动。
  4. 重复步骤2和3,直到起始指针不小于末尾指针。
  5. 原数组的元素顺序已经被逆序修改。

代码

public static void reverseArrayInPlace(int[] arr) {int start = 0;int end = arr.length - 1;while (start < end) {int temp = arr[start];arr[start] = arr[end];arr[end] = temp;start++;end--;}
}

优点

  • 不需要额外的内存空间,直接修改原数组。
  • 算法简单,空间复杂度低。

缺点

  • 修改了原数组的顺序,可能不适用于需要保持原数组不变的情况。

方法3: 使用递归实现

思路

  1. 递归方法的基本情况是数组为空或只有一个元素,此时无需逆序操作,直接返回原数组。
  2. 对于其他情况,可以递归地将数组的子部分逆序,然后将第一个元素放在逆序后的数组的末尾。
  3. 递归终止条件是数组长度为0或1。

代码

public static void reverseArrayRecursive(int[] arr, int start, int end) {if (start >= end) {return;}int temp = arr[start];arr[start] = arr[end];arr[end] = temp;reverseArrayRecursive(arr, start + 1, end - 1);
}public static void reverseArray(int[] arr) {reverseArrayRecursive(arr, 0, arr.length - 1);
}

优点

  • 不需要额外的内存空间,直接修改原数组。
  • 使用递归,可以将问题分解为更小的子问题,增加代码的可读性。

缺点

  • 递归方法可能导致栈溢出,对于非常大的数组不适用。
  • 递归方法在某些情况下可能不如迭代方法高效。

总结和推荐

  • 方法2(修改原数组实现)通常是最好的选择,因为它不需要额外的内存空间,直接修改原数组,适用于大多数情况。
  • 方法1(创建新数组实现)适用于需要保持原数组不变的情况,但需要额外的内存空间。
  • 方法3(使用递归实现)可以增加代码的可读性,但对于大数组可能会导致栈溢出,不太适用。只有在递归深度不会很大的情况下才建议使用。
http://www.lryc.cn/news/186267.html

相关文章:

  • vue run dev 配置nginx
  • Python实现RNN算法对MFCC特征的简单语音识别
  • 借助PLC-Recorder,汇川中型PLC(AM、AC系列,CODESYS平台)2ms高速采集的方法
  • vscode package.json文件开头的{总是提升警告
  • $attrs 和 $listeners (vue2vue3)
  • 嵌入式系统中的加密性能:第2部分
  • STM32F103 最小系统 PCB 设计与原理
  • JVM篇---第十一篇
  • MongoDB——window11安装mongodb5.0.21版本服务端(图解版)
  • 第1次 更多的bash shell命令
  • 工业路由器项目应用(4g+5g两种工业路由器项目介绍)
  • 国产开源无头CMS,MyCms v4.7 快捷生成接口开发后台
  • C++(反向迭代器)
  • DataX和dataX-web 集群部署及使用
  • 常见的数据存储方案:选择合适的方式来管理您的数据
  • leetcode 221 最大正方形 + 1277 统计全为1的正方形子矩阵
  • yolov7车牌识别(12种中文车牌类型)
  • Mac PF命令防火墙
  • prototype-based learning algorithm(原型学习)
  • 【数据结构-二叉树 八】【遍历求和】:求根到叶子节点数字之和
  • PHP知识大全
  • Jmeter常用参数化技巧总结!
  • iTunes更新iOS17出现发生未知错误4000的原因和解决方案
  • 微信小程序 table表格 固定表头和首列 右侧表格可以左右滚动
  • Final Cut Pro 10.6.10中文用法儿
  • 【网络安全---XSS漏洞(1)】XSS漏洞原理,产生原因,以及XSS漏洞的分类。附带案例和payload让你快速学习XSS漏洞
  • 云计算:常用系统前端与后端框架
  • asp.net闲置物品购物网系统VS开发sqlserver数据库web结构c#编程Microsoft Visual Studio
  • 一般纳税人缺少进项票,如何降低税负压力?
  • UniAD 论文学习