关于leetcode中关于栈的题目的运行速度优化问题

一、问题

今天刷题的时候,总有疑惑,为什么自己代码的思路和别人差不多却总是慢那么多,然后才发现原来是我使用的是java自带的栈的问题,而别人用的是自己数组实现栈。

使用java提供的栈的运行时间:
在这里插入图片描述

在这里插入图片描述
而改成数组实现栈后的时间:
在这里插入图片描述


二、问题根源

其实就是java提供的栈初始化的时候固定了长度,是10:

  • java.util.Stack继承了java.util.Vector类。
  • java.util.Stack类只有一个构造方法:public Stack() {},因此会调用到父类里的构造方法public Vector() {this(10);}
    在这里插入图片描述
    然后当添加元素的时候,会遇到扩容问题:
  • push调用的是java.util.Vector里的addElement(E obj)方法:
    在这里插入图片描述
  • 可以看到java.util.Vector里的addElement(E obj)
    在这里插入图片描述
  • 会涉及到扩容问题,如果测试集比较大,那么栈的深度也需要越来越深,此时就容易扩容,扩容需要复制原来的元素到新的地方,因此会造成时间的浪费。



三、总结

综上所述,如果遇到不能够自己确定长度的java自带的数据结构,可以自己简单实现,因为自己简单实现可以确认长度,确认长度后不会有扩容问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
打开leetcode很卡 Leetcode | 算法刷题 算法学习: 由于Leetcode题量大,内容多,复习难度大,学习掌握算法的情况也不是很好。 从8.28开始转刷剑指offer,一共67道题目,其简单题7道,等难度题31道,较难题26道,困难题3道 1: 简单题和等难度题(共38道题目) 2: 最优解,做笔记 3: 每天2道,隔天复习(即每天4道题) 4: Python 每日打卡: 8月: 28:1⃣剑指offer刷题 29:1⃣剑指offer刷题 30:1⃣剑指offer刷题2⃣博客网站布局搭建完毕 8月 28 29 30 31 . . . 1h练字/阅读 :check_box_with_check: :check_box_with_check: :check_box_with_check: :check_box_with_check: :cross_mark: :cross_mark: :cross_mark: 2+2算法题 :check_box_with_check: :check_box_with_check: :check_box_with_check: :check_box_with_check: :cross_mark: :cross_mark: :cross_mark: 博客网站 :check_box_with_check: :check_box_with_check: :check_box_with_check: :check_box_with_check: :cross_mark: :cross_mark: :cross_mark: 毕业课题 :cross_mark: :cross_mark: :check_box_with_check: :check_box_with_check: :cross_mark: :cross_mark: :cross_mark: 认真投入学习 9月第一周 1 2 3 4 5 6 7 1h练字/阅读 :check_box_with_check: :check_box_with_check: :cross_mark: :check_box_with_check: - - - 2+2算法题 :check_box_with_check: :check_box_with_check: :cross_mark: :check_box_with_check: - - - 博客网站 :check_box_with_check: :check_box_with_check: :check_box_with_check: :check_box_with_check: :cross_mark: :cross_mark: :cross_mark: 毕业课题 :cross_mark: :cross_mark: :cross_mark: :cross_mark: :cross_mark: :cross_mark: :cross_mark: 1号:

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值