Java用队列优化递归

java快速排序及优化方法(递归实现快排&循环实现快排) 快排应用场景:数据量大比较无序 1. 算法思路 ① 取基准值 ② 按照基准值将区间划分成左右两部分 ③ 递归排列基准值左半侧以及右半侧(升序/降序) public static void quickSort(int[] array, int left, int right) { if (right - left > 1) { //说明区间中至少有两个元... 阅读详情
  1. 递归的优点
     递归代码写起来比较方便简洁,结构层次清晰,可读性比较好。
  2. 递归的缺点
     递归需要调用函数,递归需要系统堆栈,递归空间和时间消耗都比较大,并且如果递归太深,会发生 堆栈溢出,系统会奔溃。
  3. 如何解决递归太深的问题?
     当使用递归遍历的目录可能存在递归太深的时候,我们可以选择用队列来优化递归。
  4. 遍历文件例子:
    public void getFile(File file){
        if(file.isDirectory()){//如果是目录
            File[] files = file.listFiles();
            for(int i=0;i<files.length;i++)
                getFile(files[i]);//递归
        }
        else if(file.isFile()){
            //如果是文件,就输出。
            System.out.println(file.getName());
        }
    }

5 . 使用队列优化。

//创建一个队列
Queen<File> queue = new LinkedList<File>();
queue.offer(file);
while(!queue.isEmpty()){//如果队列不为空
    File file = queue.poll();
    if(file.isDirectory()){
        //从队列中获取一个File
        File[] files = file.listFiles();
        //是目录,将目录下所有文件遍历出来,存储到队列中
        for(int i =0;i<files.length;i++)
            queue.offer(files[i]);
    }else{
        //是文件,进行输出。
        System.out.println(file.getName());
    }
}

6 . 总结
 如果递归的是深而不广的树时,应该使用队列来优化递归;如果递归是广而不深的树的时候,就应该用递归来优化队列。

Java最优队列PriorityQueue自定义排序规则 PriorityQueue Java自带的最优队列,其内部实现方法是一个小顶堆二叉树。最小的节点永远在上方,小顶堆在做前K个这类问题是有比全部排序好的效果。O(Klogn) k<n而整体快排也有O(nlogn)的时间复杂度,所以PriorityQueue是我们必须掌握的一种数据结构。 LeetCode 5556. 可以到达的最远建筑 给你一个整数数组 heights ,表示建筑物的高度。另有一些砖块 bricks 和梯子 ladders 。 你从建筑物 0 开始旅程,不断向后面的建筑物移动,期间可能会 阅读详情

相关推荐

大数据应用技术实验报告一 Hadoop三种模式安装配置

JDK+Hadoop安装配置、单机模式配置 以下操作在SecureCRT里面完成 1.关闭防火墙 firewall-cmd --state 显示防火墙状态running/not running systemctl stop firewalld 临时关闭防火墙,每次开机重新开启防火墙 systemctl disable firewalld 禁止防火墙服务。 2.传输JDK和HADOOP压缩包 Sec...

Ruthless_Childe的博客 3094

Java day16——队列Queue、二叉树优化(递归)、Set(I)、Map(I)

这里写目录标题队列QueueAPIDeque双端队列LinkedList二叉树优化(递归)Set(I)HashSetadd原理remove移除why重写hashCode和equalsSortedSet(I)总结Map(I)常用API迭代方式应用——统计个数 队列Queue Queue(I): - 队列(offer/peek/poll) Deque(I) - 双端队列(offerFirst/offerLast…) - 栈(push/pop) LinkedList API offer("")进

qq_40905010的博客 340

差分分析.

差分分析是一种强大的密码攻击技术,通过研究明文差分与密文差分的关系来破解加密算法。本文系统介绍了差分分析的核心概念和方法: 基础差分分析:通过异或运算抵消密钥影响,利用差分分布表(DDT)寻找高概率差分特征,以FEAL-4为例展示了具体攻击过程。 高级差分技术:包括截断差分分析(关注部分特征)、不可能差分分析(排除概率为0的路径)和飞来去器分析(将算法分段处理)。 自动化搜索方法:介绍了松井算法和MILP(混合整数线性规划)方法,将差分路径搜索转化为数学优化问题。 这些方法展现了差分分析从基础理论到现代应用

weixin_61562383的博客 786

java.lang.StackOverflowError解决方案

StackOverflowError通常是由未正确处理的递归或过深的递归调用引起的。通过适当的递归终止条件、优化递归为迭代、增加JVM栈大小以及其他优化技术,可以有效地解决或避免这种错误。理解并应用这些方法可以显著提高程序的健壮性和性能。

微笑听雨 2566

保姆级教程:用Ubuntu 22.04搭建RustDesk中继服务器(含Cloudflare避坑指南)

本教程详细指导如何在Ubuntu 22.04上搭建RustDesk中继服务器,解决跨国远程协作的延迟问题。涵盖环境配置、Rust编译优化、服务部署及Cloudflare代理设置等关键步骤,帮助用户实现高性能的私有中继服务。

weixin_29002209的博客 527

11.3 海岛微电网与工业园区的构网应用

海岛微电网与工业园区配电网是构网技术下沉应用的两大典型场景。海岛微电网以构网型储能为核心,解决孤岛系统稳定性问题,需具备黑启动、多能源协调和故障穿越能力;工业园区则侧重电能质量治理、并离网无缝切换和经济优化运行。两类场景均需解决多机并联稳定性、故障特性适配和分层协同控制等关键技术。构网型变流器的电压源构建能力、自适应控制策略及飞轮储能等特殊应用,为构建高可靠性、高经济性的分布式能源系统提供了创新解决方案。

技术工作者 1086

Java当中什么场景使用递归,如何使用

程序调用自身的编程技巧叫做递归。优点:代码简洁、清晰,并且容易验证正确性。在一定的程度上还能帮我们减少很多重复代码。

怪咖@的博客 2076

材料带隙预测(图神经网络)(⭐⭐)—— 用晶体图网络预测钙钛矿材料的能带隙,加速光伏材料筛选。技术栈:CGCNN、MEGNet、Materials Project数据集

钙钛矿太阳能电池以其高效率、低成本的优势迅速崛起,但传统“试错法”材料筛选效率极低,严重制约了光伏技术的迭代速度。近年来,基于图神经网络的材料带隙预测方法,特别是晶体图神经网络(CGCNN)和材料图网络(MEGNet),为这一问题提供了革命性的解决方案。本文系统梳理了材料带隙预测从传统计算到深度学习的演进历程,深入剖析了CGCNN与MEGNet的架构设计、数学原理及创新机制,详细阐述了Materials Project数据集的构建、特征工程与处理策略。

2201_76125393的博客 48

Java解决递归造成的堆栈溢出问题

在使用递归算法时,经常会遇到堆栈溢出的问题,特别是处理大规模的数据时。本文将介绍如何使用Java解决递归造成的堆栈溢出问题。

qq_31532979的贺公子之数据科学与艺术博客,致力于科技向善,拥抱开源,要用技术的影响力来领导团队,而不是威权和职位! 419

RK3576 Buildroot 双机 ADB 异常排障实录:同版 `boot.img`,一台可识别一台不可识别

进程在跑”不等于“USB 枚举成功”,adbd存活只是必要不充分条件。生产环境中的全局别名可能反向污染系统脚本。shell 命令替换中的字符串问题,必须做字节级验证(od -tx1相比“改环境规避”,核心脚本对输入做鲁棒处理更可长期维护。

小灰灰的博客 212

python代码实现了一个基于图注意力网络(GAT)和长短期记忆网络(LSTM)的股票成交量预测模型

自定义数据集类:定义了类,继承自。该类用于生成股票数据的时间序列样本,每个样本包含一个长度为seq_length的时间序列和对应的目标成交量。数据加载器:使用DataLoader对数据集进行批量加载,设置批量大小为 64,并开启数据打乱功能。GAT - LSTM 模型:定义了GAT_LSTM类,继承自。该模型结合了 GAT 和 LSTM 两种神经网络:GAT 部分:使用GATConv处理全局图特征,捕获股票之间的相互关系。LSTM 部分:使用nn.LSTM处理时间序列数据,捕捉时间序列的动态变化。

huanghm88的专栏 426

使用队列来优化递归操作完成文件下载

使用队列来优化递归操作完成文件下载 开发工具与关键技术:eclipse/ 递归&队列 作者:苦行者 撰写时间:2021年4月28日 一、 递归: 问:什么是递归? 答:通俗的讲就是“方法自己调用自己”。 那么它在内存中有什么特点? 递归操作在内存中的原理其实就是一个堆栈的过程,而栈结构的特点是“先进后出”,这与队列的“先进先出”的特性是截然相反的。 一般的,文件上传和下载需用到递归操作,它可以纵向遍历指定好的某个资源目录,然后把指定目录下的所有文件取出来,拿到对应文件的绝对资源路径,再拼接成一个

weixin_44541162的博客 878

手把手教你玩转RISC-V指令集​​​专栏--​​1.2 对比x86/ARM:RISC-V的三大核心优势(开放、灵活、可扩展)​

​:RISC-V以“开放打破垄断、灵活适配场景、扩展定义未来”的三大优势,正在重塑计算架构格局。其核心价值不仅是技术革新,更是对全球半导体产业链话语权的重新分配。

amy_mhd的博客 130

史上最全!从入门到精通:深入剖析数据结构与算法(三:基础数据结构——递归、队列)

基础数据结构(递归、队列)+Leetcode.习题与解析

LLM | Agent | RAG | Java 2610

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

剑指Offer-1-20题刷题知识点总结Java

数组 第一题:二维数组中的查找 第六题:旋转数组的最小数字 第十三题:调整数组顺序使奇数位于偶数前面 第十九题:顺时针打印矩阵 思考与总结: 在Java中二维数组判空要考虑三种情况 1、二维数组首地址是否为空,即array==null; 2、二维数组是否为{},即array.length==0的情况; 3、二维数组是否为{{}},即array.length==1&&array...

llluluyi的博客 310

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

二叉树的递归和非递归遍历

树节点的基本结构: public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int val, TreeNode left, TreeNode right) { this.val = val; thi

xuan971130的博客 1167

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Java栈和队列

栈–是一种特殊数列存储模式,**“后进先出,先进后出”**是栈的特点。栈的存储模式是一种“压栈”过程,将栈中数据输出是“出栈”过程,特别一提的栈与其他不同数据的存储特点是“先进后出”模式,相当于一个桶,在桶中放入一个个圈,而取圈时只能依次从上面取,不能将底下圈取出。使用队列时,会发现队列一头进,一头出,而后无法使用前面的内存空间,那岂不是会造成空间浪费,这时候需要将前面的空间利用起来可以编写一个。队列,顾名思义,是一个排队方式存储数据的线性表,与栈不同的是,队列是一种**“先进先出,后进后出”

闲来垂钓碧溪上的博客 291

Java编程面试题解析与优化:算法、数据结构和常见问题

无论是应届毕业生还是有经验的开发人员,都需要经历一轮轮的面试来展示自己的技能和能力。链表是一种非连续的数据结构,它由节点组成,每个节点包含数据和指向下一个节点的指针。通过对这些问题的解析和优化思路的探讨,我们可以提高自己的面试技巧和编程能力。哈希表是一种根据关键字直接访问数据的数据结构,通过哈希函数将关键字映射到哈希表的索引。动态规划算法是一种通过将问题分解为子问题并解决子问题,最后组合子问题的解来解决整个问题的算法。算法是一组解决问题的明确指令。1. 分析算法的时间复杂度和空间复杂度,选择更高效的算法。

C891106的博客 767

剑指offer-斐波那契数列

题目要求 求斐波那契数列的第n项 由于斐波纳挈数列是以兔子的繁殖引入的,因此也叫“兔子数列”。它指的是这样一个数列:0,1,1,2,3,5,8,13…从这组数可以很明显看出这样一个规律:从第三个数开始,后边一个数一定是在其之前两个数的和。在数学上,斐波纳挈数列可以以这样的公式表示:F(0) = 0 F(1) = 1 F(n) = F(n-1) + F(n-2),(n>=2) 思路 (1)....

qq_20667511的博客 227

Java数据结构与算法视频教程2023新版 视频教程 下载

基础数据结构-058-链表-e02-根据值删除节点2-递归.mp4。基础算法-131-二叉搜索树-e04-判断合法-中序非递归.mp4。基础算法-132-二叉搜索树-e04-判断合法-中序递归1.mp4。基础数据结构-058-链表-e01-反转单向链表3-递归.mp4。基础数据结构-058-链表-e03-删除倒数节点1-递归.mp4。基础数据结构-058-链表-e04-有序链表去重2-递归.mp4。基础数据结构-058-链表-e05-有序链表去重1-递归.mp4。

Chaochao1984a的博客 808

坚持刷题 | 二叉树的层序遍历

坚持刷题,老年痴呆追不上我,今天刷:二叉树的层序遍历

weixin_44435110的博客 909

树形菜单的实现方式

以上我们介绍了三种在Java中实现树形菜单的方法,从基础的递归法、队列法到使用Map进行优化。根据实际需求和数据量大小,你可以选择合适的方法进行实现。不过,无论使用哪种方法,都要确保理解树形结构的基础原理和具体实现细节,以确保代码的正确性和效率。还有一种是路径枚举方式的一个简单例子,它已经足够用于实际应用。当然,还有许多细节可以优化,如路径长度限制、节点移动等。而其他的树形编号方法,如嵌套集模型和闭包表,会有更复杂的逻辑。但总的来说,理解核心概念并将其应用于实际代码是关键。

m0_64363449的博客 991

java 递归调整为队列

如果递归的是深而不广的树时,应该使用队列来优化递归;如果递归是广而不深的树的时候,就应该用递归来优化队列。 https://blog.youkuaiyun.com/pseudonym_/article/details/71600084?utm_source=itdadao&utm_medium=referral 转载于:https://www.cnblogs.com/qxynotebook/p/95...

weixin_30408309的博客 285

扩展--使用队列来优化递归操作完成文件下载

扩展:使用队列来优化递归操作. 队列特点:先进先出. 在jdk中有一个接口Queue 它有一个实现类叫LinkedList它其时就是一个队列。 如果要使用队列,插入 offer 获取使用 poll 使用队列来优化递归操作:是可以解决目录层次过多问题。 因为:递归操作可以理解成是纵向的遍历,如果目录层次比较多,在内存中存储的数据也多,会引起溢出。 使用队列,它...

Leon_Jinhai_Sun的博客 388

mysql存储引擎面试,java架构面试题目

小编利用空余时间整理了一份《MySQL性能调优手册》,初衷也很简单,就是希望能够帮助到大家,减轻大家的负担和节省时间。关于这个,给大家看一份学习大纲(PDF)文件,每一个分支里面会有详细的介绍。这里都是以图片形式展示介绍,如要下载原文件以及更多的性能调优笔记(MySQL+Tomcat+JVM)!由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Java)

m0_61549674的博客 971

LeetCode刷题——两数相加 II#445#Medium

两数相加 II的题目如下图,该题属于栈类型和数学类型的题目,主要考察对于数学方法的使用和栈结构的理解。本文的题目作者想到2种方法,分别是栈方法和递归方法,其中栈方法使用Java进行编写,而递归方法使用Python进行编写,当然这可能不是最优的解法,还希望各位大佬给出更快的算法。

喷火龙与水箭龟的博客 286
上一篇: java两种常用文件下载实例
下一篇: 抽象类DateFormat
pseudonym_
博客等级 码龄10年 88粉丝 205原创
评论 8
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值