当前位置: 首页 > 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(使用递归实现)可以增加代码的可读性,但对于大数组可能会导致栈溢出,不太适用。只有在递归深度不会很大的情况下才建议使用。

相关文章:

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

题目:将一个数组逆序输出。 程序分析 要将一个数组逆序输出&#xff0c;即将数组中的元素顺序颠倒过来&#xff0c;可以使用多种方法。基本思路是创建一个新数组或修改原数组&#xff0c;将元素的顺序颠倒。 方法1: 创建新数组实现 思路 创建一个新的数组&#xff0c;长度…...

vue run dev 配置nginx

由于项目有多个vue项目,在开发过程中需要联调,而不是每次发布后再联调. 比如有2个项目: main-project(主项目),test1-project. 由于是多项目,每个项目相当于有一个独立的域,这里test1-project设置域名称为test1 vue修改 在vite.config.ts中配置一个base:"/test1/"…...

Python实现RNN算法对MFCC特征的简单语音识别

Python实现RNN算法对MFCC特征的简单语音识别 1、实现步骤 借助深度学习库 TensorFlow/Keras 来构建模型 1.对标签进行编码,将文本标签转换为整数标签。 2.对 MFCC 特征数据进行填充或截断,使其长度一致,以便于输入到 RNN 模型中 3.如果是二维数据需要转成三维: Simpl…...

借助PLC-Recorder,汇川中型PLC(AM、AC系列,CODESYS平台)2ms高速采集的方法

高速数据采集要保证速度&#xff0c;也要保证时刻的准确性。在windows系统里&#xff0c;时间稳定性是个很难的问题。如果PLC发送的数据里带有时间信息&#xff0c;则可以由PLC来保证采样周期的稳定性。 从V2.12版本开始&#xff0c;PLC-Recorder软件可以处理发送电文里的时间…...

vscode package.json文件开头的{总是提升警告

警告如下 Problems loading reference https://json.schemastore.org/stylelintrc.json: Unable to load schema from https://json.schemastore.org/stylelintrc.json: read ECONNRESET. 解决如下 在设置&#xff08;settings.json&#xff09;里 新增一条属性 "ht…...

$attrs 和 $listeners (vue2vue3)

目录 透传 Attributes Attributes 继承​ 对 class 和 style 的合并 v-on 监听器继承 深层组件继承 禁用 Attributes 继承 多根节点的 Attributes 继承 vue2 $attrs 和 $listeners $attrs 概念说明 $attrs 案例 $listeners 概念说明 $listeners案例 vue3 $attr…...

嵌入式系统中的加密性能:第2部分

本系列的第1部分讨论了影响系统级密码性能的硬件和软件变量。现在&#xff0c;在第2部分中&#xff0c;我们将重点介绍两种用于测量高级后备加速器性能的方法&#xff1a;1&#xff09;驱动器级加速器测试以识别加速器或SoC内存带宽约束&#xff0c;以及2&#xff09;应用程序/…...

STM32F103 最小系统 PCB 设计与原理

这篇文章是来自我学习&#xff1a; ​​​​​​带着你从手册开始画板 STM最小系统板教程系列(一)_哔哩哔哩_bilibili​​​​​​ 这套教程的笔记&#xff0c;同时本文中也参考了其他教程以及我遇到的困惑与自答&#xff0c;最终汇总。 一、单片机最小系统 单片机最小系统是由…...

JVM篇---第十一篇

系列文章目录 文章目录 系列文章目录一、如何选择垃圾收集器?二、什么是类加载器?三、什么是 tomcat 类加载机制?一、如何选择垃圾收集器? 如果你的堆大小不是很大(比如 100MB ),选择串行收集器一般是效率最高的。 参数: -XX:+UseSerialGC 。如果你的应用运行在单核的机…...

MongoDB——window11安装mongodb5.0.21版本服务端(图解版)

目录 一、mongodb官网下载地址二、安装步骤三、配置环境变量四、运行mongodb 一、mongodb官网下载地址 mongodb官网下载地址&#xff1a;https://www.mongodb.com/try/download/community 二、安装步骤 双击运行下载好的mongodb-windows-x86_64-5.0.21-signed.msi安装包&am…...

第1次 更多的bash shell命令

1.检测程序 程序都是进程在运行&#xff0c;进程里面有很多线程&#xff0c;面试经常会问进程和线程的区别&#xff0c;线程可以访问另一个线程的什么什么的&#xff0c;这些我都听腻了&#xff0c;区别就是进程会分配程序需要的空间&#xff0c;创建线程需要的资源&#xff0c…...

工业路由器项目应用(4g+5g两种工业路由器项目介绍)

引言&#xff1a; 随着工业智能化的不断发展&#xff0c;工业路由器在各个领域的应用越来越广泛。本文将介绍两个工业路由器项目的应用案例&#xff0c;一个是使用SR500 4g工业路由器&#xff0c;另一个是使用SR800 5g工业路由器。 详情&#xff1a;https://www.key-iot.com/i…...

国产开源无头CMS,MyCms v4.7 快捷生成接口开发后台

MyCms 是一款基于 Laravel 开发的开源免费的开源多语言商城 CMS 企业建站系统。 MyCms 基于 Apache2.0 开源协议发布&#xff0c;免费且可商业使用&#xff0c;欢迎持续关注我们。技术交流 QQ 群&#xff1a;887522124 加群请备注来源&#xff1a;如gitee、github、官网等 v4…...

C++(反向迭代器)

前言&#xff1a; 上一章我们介绍了适配器&#xff0c;也提了一下迭代器适配器&#xff0c;今天我们就从反向迭代器把迭代器适配器给解释一下。 既然 都叫迭代器容器了 就说名只要接口合适他可以封装实现各种容器需求包括vector list 。 目录 1.反向迭代器设计 1.1反向迭代…...

DataX和dataX-web 集群部署及使用

&#x1f4d1; DataX和dataX-web 集群部署及使用 一 . 安装前准备 DataX 是一个异构数据源离线同步工具&#xff0c;致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能。 DataX 采用 框架 插件 的模式…...

常见的数据存储方案:选择合适的方式来管理您的数据

对于数据存储方案的选择&#xff0c;是现代企业和个人都需要面对的重要决策。本文将为您介绍几种常见的数据存储方案&#xff0c;包括关系型数据库、NoSQL数据库以及分布式文件系统。通过了解每种方案的特点、操作方式和适用业务类型&#xff0c;希望能帮助您选择合适的数据存储…...

leetcode 221 最大正方形 + 1277 统计全为1的正方形子矩阵

题目 在一个由 ‘0’ 和 ‘1’ 组成的二维矩阵内&#xff0c;找到只包含 ‘1’ 的最大正方形&#xff0c;并返回其面积。 示例 输入&#xff1a;matrix [[“1”,“0”,“1”,“0”,“0”],[“1”,“0”,“1”,“1”,“1”],[“1”,“1”,“1”,“1”,“1”],[“1”,“0”,“…...

yolov7车牌识别(12种中文车牌类型)

12种中文车牌类型&#xff1a; 1.单行蓝牌 2.单行黄牌 3.新能源车牌 4.白色警用车牌 5 教练车牌 6 武警车牌 7 双层黄牌 8 双层武警 9 使馆车牌 10 港澳牌车 11 双层农用车牌 12 民航车牌 测试demo: 以yolov7-lite-s 为例: python detect_rec_plate.py --detect_model weigh…...

Mac PF命令防火墙

查看所有网络接口及其名称 ifconfig -a 文件目录&#xff1a;/etc/pf.conf 在文件末尾添加以下行&#xff1a; block drop from IP_ADDRESS其中&#xff0c;"IP_ADDRESS"是您要屏蔽的IP地址。 输入以下命令以重新加载pf防火墙配置文件&#xff1a; sudo pfctl …...

prototype-based learning algorithm(原型学习)

Prototype-based learning&#xff08;原型学习&#xff09;是一种机器学习方法&#xff0c;它的核心思想是通过存储一组代表性的样本&#xff08;原型&#xff09;&#xff0c;然后使用这些原型来进行分类、回归或聚类等任务。这种方法模拟了人类学习的方式&#xff0c;人们往…...

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh&#xff1f; debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…...

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

&#x1f31f; 什么是 MCP&#xff1f; 模型控制协议 (MCP) 是一种创新的协议&#xff0c;旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议&#xff0c;它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…...

unix/linux,sudo,其发展历程详细时间线、由来、历史背景

sudo 的诞生和演化,本身就是一部 Unix/Linux 系统管理哲学变迁的微缩史。来,让我们拨开时间的迷雾,一同探寻 sudo 那波澜壮阔(也颇为实用主义)的发展历程。 历史背景:su的时代与困境 ( 20 世纪 70 年代 - 80 年代初) 在 sudo 出现之前,Unix 系统管理员和需要特权操作的…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

前端开发面试题总结-JavaScript篇(一)

文章目录 JavaScript高频问答一、作用域与闭包1.什么是闭包&#xff08;Closure&#xff09;&#xff1f;闭包有什么应用场景和潜在问题&#xff1f;2.解释 JavaScript 的作用域链&#xff08;Scope Chain&#xff09; 二、原型与继承3.原型链是什么&#xff1f;如何实现继承&a…...

SAP学习笔记 - 开发26 - 前端Fiori开发 OData V2 和 V4 的差异 (Deepseek整理)

上一章用到了V2 的概念&#xff0c;其实 Fiori当中还有 V4&#xff0c;咱们这一章来总结一下 V2 和 V4。 SAP学习笔记 - 开发25 - 前端Fiori开发 Remote OData Service(使用远端Odata服务)&#xff0c;代理中间件&#xff08;ui5-middleware-simpleproxy&#xff09;-CSDN博客…...

Python 包管理器 uv 介绍

Python 包管理器 uv 全面介绍 uv 是由 Astral&#xff08;热门工具 Ruff 的开发者&#xff09;推出的下一代高性能 Python 包管理器和构建工具&#xff0c;用 Rust 编写。它旨在解决传统工具&#xff08;如 pip、virtualenv、pip-tools&#xff09;的性能瓶颈&#xff0c;同时…...

Fabric V2.5 通用溯源系统——增加图片上传与下载功能

fabric-trace项目在发布一年后,部署量已突破1000次,为支持更多场景,现新增支持图片信息上链,本文对图片上传、下载功能代码进行梳理,包含智能合约、后端、前端部分。 一、智能合约修改 为了增加图片信息上链溯源,需要对底层数据结构进行修改,在此对智能合约中的农产品数…...

Python Ovito统计金刚石结构数量

大家好,我是小马老师。 本文介绍python ovito方法统计金刚石结构的方法。 Ovito Identify diamond structure命令可以识别和统计金刚石结构,但是无法直接输出结构的变化情况。 本文使用python调用ovito包的方法,可以持续统计各步的金刚石结构,具体代码如下: from ovito…...

Kafka入门-生产者

生产者 生产者发送流程&#xff1a; 延迟时间为0ms时&#xff0c;也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于&#xff1a;异步发送不需要等待结果&#xff0c;同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...