侧边栏壁纸
  • 累计撰写 7 篇文章
  • 累计创建 5 个标签
  • 累计收到 3 条评论

目 录CONTENT

文章目录

随笔一则

Lieey
2024-06-10 / 0 评论 / 0 点赞 / 107 阅读 / 2574 字

随笔一则

是夜,原本摆了一天的我深夜焦虑起来了,遂打开力扣写了一道算法。。。。。。。。。

没想到一道中等难度的题便成了拦路虎,将我斩于马下。我看着最长连续序列(明明一次排序+遍历就彳亍),死活

想不起来数组的排序方法怎么用,于是想尝试以下最近常用的stream。却没想到这是尴尬的开始。

我将数组的int元素转化成了Integer(装箱后),却用"=="来比较他们的大小,于是再测试的时候没有问题,却在提

交的时候数据过大显示错误。我百思不得其解,遂请教万能的群友。经过群友的点拨,我茅塞顿开,却也沦为笑柄

😕 。群友不仅指出我舍近求远放着封装好的Arrays.sort()方法不用,非要用stream,是不是学魔怔了,而且还

点出我许多知识盲区,遂写下此篇,铭记这一耻辱的一天:

  • 当基本类被装箱后,不能再使用==来比较,需要注意的是,对象 i 和 p 之所以等价为 true,是因为它们是同一个对象,
    比较不是基于值,而是基于对象的等价性。如果整数 i 和 p 不在 -128 或 127 的范围内,则不会使用缓存,因此会创建新的对象。
  • 在进行值比较时,请务必使用".equals "方法。还需要注意的是,实例化 Integer 并不会创建缓存。
  • Java对较小的Integer对象是有缓存的,默认范围是-128 to 127,在这个范围内你构造相同数字会返回同一个对象,具体可以看看Integer.valueOf方法以及IntegerCache类(java装箱缓存
  • 本题还可以使用柯朵莉树来暴力解题,但是柯朵莉树不会,还需要继续沉淀(Hallo 算法永远的神)
  • 本题使用Hashset可以优化时间复杂度度为O(n),现在使用Arrays时间复杂度为O(nlogn),具体解法可以看最长连续序列
  • 其实就算用流操作也完全可以,错就错在不该调mapToObj,IntStream也是有sorted方法的,退一万步讲,即使需要把IntStream换成Stream,其实也应该用Integer.boxed()才对(看来我还得接着深造stream

我错了,我是fw🤐🤐🤐🤐🤐🤐🤐🤐🤐🤐🤐🤐我想我再也不会笑了

0

评论区