insert/get/Random【避免漂移问题】


我一开始的做法: 我也意思到必须用ArrayList  + HashMap 但是问题是arrylist的size 会shrink,一shrink position就乱了。


正解:主要是Remove那个地方我不会写。


OMG....

这个Trick在于每次要删的时候把要删的值和 array最后一个数交换一个位置并且update一下HashMap里的position。这样的话,remove的时候就不会发现position的漂移了

比如说:

如果你把position 3的位置删了,整个array的size都会shrink。然后本来4的位置的东西就会到3,5的位置东西会到4.。。

然后我们本来HashMap里的索引也就没用了。


解决办法就是每次把remove val pos和最后一个数的pos交换,这样虽然数组缩小,但是pos没有位移!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 背景 一年多以前我在知乎上答了有关LeetCode的问题, 分享了一些自己做题目的经验。 张土汪:刷leetcod...
    土汪阅读 12,788评论 0 33
  • 总结:侯老师的这门stl课,只看视频和ppt是不太够的。应该结合侯老师的《stl源码剖析》和Nicolai M J...
    诵之思之阅读 260评论 3 0
  • 近几年,“手账”在国内迅速流行起来,不仅相关的书籍和周边产品销量火爆,各位手账达人的自媒体平台也吸引了众多粉丝。 ...
    火残翼阅读 679评论 0 11
  • 跟黄灵去健身房之前,去吃了个蒸饺和炒粉。到了健身房,我不是特别想上瑜伽课,但想想还是进去了。效果特别不好,一点...
    大胖胖企鹅阅读 183评论 0 0
  • ——魏君学习非暴力沟通心得 我常听到人们说非暴力沟通是什么以及有何作用。据我的经验都是根据自己对非暴力沟通的了解,...
    魏君NVC阅读 6,487评论 2 1