算法1.3

  • Java 应用类型必须被实例化为引用类型,即封装类型(如int-》Integer)

    • 自动装箱

    • 自动拆箱

  • 背包:一种不支持从中删除元素的集合数据类型,用于收集元素并无序遍历迭代所有收集到的元素

    • 用例:计算平均值
  • 基于数组的栈大小动态调整

    • 栈的大小在数组创建时固定,数组大小无法改变,容易在压入时造成栈溢出的问题或空间浪费的问题,因此在使用栈前必须预估栈的最大容量

    • 修改数组大小:将原栈转移到另一更大容量的数组中

      private void resize(int max){
        Item[] temp = (Item[]) new Object[max];//max大于原栈大小N
        for(int i = 0; i<N;i++){
          temp[I] = a[I];          
        }
        a=temp;
      }
      
    • 压入数据:检查栈大小N与数组大小a.length,相等则a.length加倍

      private void push(Item item){
        if(N == a.length){resize(2*a.length);}
        a[N++] = item;
      }
      
    • 删除栈顶元素(最近添加元素):删除栈顶元素,然后检查a.length是否为N4倍,是则将a.length减半,使其保持约半满状态,接下来仍可以进行多次push或pop操作

      private Item pop(){
        Item item = a[--N];
        a[N] = null;//避免被删除对象游离,使其被垃圾回收器回收
        if(N>0 && N <= a.length/4){resize(a.length/2);}
        return item;
      }
      
    • 由以上操作可知栈的数组大小为偶数

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,929评论 0 33
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 2,082评论 0 2
  • 1. 是第六封信。 他写着,你不会为同一个笑话笑了一遍又一遍,但你为什么一直为同一个人哭了一次又一次。 他爱她,她...
    梦1212阅读 487评论 0 0
  • 已穿上寿衣 病房空无一人 没有哭声 一切那么安静 过后又要消毒了吧? 入秋以来第几个了? 七月以来第几个了? 第一...
    要学会摄影的小盆友阅读 179评论 0 0
  • 雨下了一夜 已淋不湿他 某某,某某某 墓碑上 有些名字开始模糊 他曾经在我们中间 他应该是个好人 不知道活得好不好...
    温州慕白阅读 298评论 0 1

友情链接更多精彩内容