力扣刷题题型笔记

简介

每刷过一道题目,把对于题目的分析记录在此,本篇不追求系统,做到什么想到什么都写在这里。好记性不如烂笔头,主要原因是本人记性比较差。

果然每接触一道就得记一道,昨天刷了好多不想记,隔了一天之后绝对不会主动回去找那些题了。

我发现一篇文章记录下刷过的有趣的题目实在是太长了,还是拆分为多篇文章,以题目类型作为分类吧。

分类

  • 哈希等价多米诺骨牌的数量
  • 字符串:力扣题型笔记 - 字符串类
  • 图岛屿数量由斜杠划分区域保证图可完全遍历最小体力消耗路径
  • 树二叉树的右视图
  • 集合等式方程可满足性
  • 查找:力扣题型笔记 - 查找类
  • 其他数组中的逆序对

提示

  • 除非题目提示是原地算法,否则不要修改传入的数据
  • 对于传入的引用类型数据,除非题目提及,不得对该数据进行修改,即使很多官方题解也这么做,但不值得学习。这一点不是对于刷题而言,而是对于开发而言。规范的开发必须保证数据的安全性,作为参数传进来的数据应当作为数据源而不应当作为中间数据。
    在开发中,如果你的 API 对传入的数据进行了修改并且你的接口文档没有提及,调用方依照惯例把一个不可变的数据传入 API,得到正确的结果,但该数据的结构或者内容发生改变,整体系统就出现了隐患。尤其是将对象的私有数据域或者 final 域传入 API 时,虽然这样做传入者本身操作有引用泄露的嫌疑,但是开发者必须秉持考虑一切情况的理念进行开发。因此,请不要为了节省内存而牺牲系统的健壮性。
  • 看题目
  • 第一步读题意,第二步问范围,第三步看要求。一切没有告知范围的题目,都应该以最大程序可以接受的量级来考虑。
  • 对一切数组或集合类型参数,第一步是进行 null 判断和空元素判断
  • 同理,null 判断是对于开发而言而非对于刷题而言,而空元素判断则是刷题也需要注意的。虽然对参数判 null 对于刷题可有可无,但是出于养成好习惯的目的,基本上我都会习惯带上的。
  • 对于需要用到比较整型规则的题目,请使用 Integer.compare(o1, o2)
  • 因为整型存在溢出问题,Integer.MIN_VALUE - Integer.MAX_VALUE 本应为负数,但是溢出后结果为 1。
Integer.MIN_VALUE = 0b10000000_00000000_00000000_00000000
Integer.MAX_VALUE = 0b01111111_11111111_11111111_11111111
~ (MAX_VALUE) + 1 = 0b10000000_00000000_00000000_00000001 // 负数补码等于原码取反加一。
+                 = 0b00000000_00000000_00000000_00000001 = 1
  • 因此,如果使用(o1, o2) -> o1 - o2 的方式判断顺序,将会发生错误。
  • 取反或者取绝对值请考虑 Integer.MIN_VALUE
  • 由于整型溢出,-Integer.MIN_VALUE 或 Math.abs(Integer.MIN_VALUE) 的结构都将是它自身。

题目难度进阶

  • 数组变更为无限流
  • 对于数组统计类型的题目,通常进阶难题都可以思考:将数组转化为内存无法放下的无限流,该如何处理。

哈希

利用映射解决问题的题目。

题目

等价多米诺骨牌对的数量

等价多米诺骨牌对数量:本质上就是求相同无序偶对的数量。思路非常简单,分为两步:

  1. 如何将无序偶用相同的元素表示。
    由于无序偶中的元素都是 1 ~ 9,所以无序偶可以直接转化为一个相同的数,例如对于 [1,2] 和 [2,1],
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值