LeetCode day1

任务要求

leetcode 不使用优先队列 java实现top k_Stack

  1. 注意点:LeetCode里面是不用写main,选择要实现的语言就会出现推荐给你的方法,把方法写完就行。
  2. 思路:说到栈就想到了之前学数据结构(c语言)时写的关于栈的代码,看任务要求是求最小栈,就想到可以根据之前学习的代码稍微修改一下
  3. 后来写了java语言实现的,要自己定义类似Stack的结构(参考了评论区的答案)

c语言实现

leetcode 不使用优先队列 java实现top k_Stack_02

首先创建栈结构,这里我默认给的初始大小是10000,当我设置1000的时候LeetCode提交测试会报错,因为LeetCode会测试数据。

leetcode 不使用优先队列 java实现top k_java语言_03

因为LeetCode不能写main,这里把声明MinStack放在创建方法里

  • 与之前在dec++书写的区别是:LeetCode整体相当于一个封装好的工具?(也许),就是不用我们自己去输入数据

leetcode 不使用优先队列 java实现top k_Stack_04

  • 入栈、出栈、取栈顶方法的实现

leetcode 不使用优先队列 java实现top k_最小值_05

  • 找最小栈元素

leetcode 不使用优先队列 java实现top k_最小值_06

-判断是否有值,释放空间

c语言提交的结果

leetcode 不使用优先队列 java实现top k_Stack_07

java语言实现

  • 后来用java语言试了一下…事实证明,不要直接用Stack,要自己定义一个类似Stack的结构去结题,不然的话…结果提交就是下面这样了…

leetcode 不使用优先队列 java实现top k_最小值_08

  • 最后参考了评论区的答案
  • 用是数组作为存储结构,Array.copyOf() 用于复制指定的数组内容以达到扩容的目的
  • 每次入栈的时候和min进行对比,获取最小值

leetcode 不使用优先队列 java实现top k_java语言_09

  • 如果出栈时恰好是最小值 ,则要重新找到最小值

java语言提交的结果

leetcode 不使用优先队列 java实现top k_java语言_10

  • 啊…现在看起来好很多了呢