leetCode刷题(三)

热题HOT 100 之简单难度总结

经过三个星期的时间,把HOT 100中简单难度的题目刷完了,一共23道。在此将这些题目中经常用到的方法总结一下,为之后刷中等难度的题目做准备。

简单的题目目前看下来主要还是考察我们对基本数据结构的一些熟悉程度,并没有涉及到很多算法什么的。其中有与二叉树相关的有4道,链表相关的有5道,还有数组哈希表栈等。只有极少数比如爬楼梯这种题目考察了裴波那契数列这种比较特殊的算法。

下面总结一下经常用到的解题方法:
快慢指针(双指针)法:
涉及到的题目如:移动零,回文链表,相交链表等。
从题目类型也可以看出来,快慢指针在链表中很容易应用。它的含义就是在遍历链表的时候定义一个快指针(比如一次的步长是两个单位),定义一个慢指针(比如一次步长一个单位)。所以就像两个人在跑道上跑步一样,跑的快的那一个总会在某个时刻追上跑的慢的那一个。这个方法可以用来判断链表是否有环,或者利用这个特性比较链表中某个位置的元素是否相等等。

动态规划:
涉及到的题目如:打家劫舍,最大子序列等
动态规划的基本思想也是将待求解问题分解成若干个子问题,先求解子问题,然后从这些子问题的解得到原问题的解。就比如打家劫舍这道题就是个经典的动态规划的问题。比如有8间房子,要想获得最大的收获,肯定是要比较前7间能获得的最大收益是多少。而前7间又需要比较前6间,以此类推,就可以得到动态规划的解决方程。

位运算:
涉及到的题目:只出现一次的数字
位运算的话在特定的场景下使用有出色的表现。比如在寻找只出现一次的数字,我们根据使用位运算的特性,可使用异或运算 ⊕。异或运算有以下三个性质。

  • 任何数和 0做异或运算,结果仍然是原来的数,即 a⊕0=a。
  • 任何数和其自身做异或运算,结果是 0,即 a⊕a=0。
  • 异或运算满足交换律和结合律,即 a⊕b⊕a=b⊕a⊕a=b⊕(a⊕a)=b⊕0=b。

递归和迭代
涉及到的题目如:合并两个有序链表,二叉树的最大深度等
递归和迭代个人认为是孪生兄弟了,理论上递归和迭代可以相互转换,但实际从算法结构来说,递归声明的结构并不总能转换为迭代结构(原因有待研究)。迭代可以转换为递归,但递归不一定能转换为迭代。

  • 递归(recursion)常被用来描述以自相似方法重复事物的过程,在数学和计算机科学中,指的是在函数定义中使用函数自身的方法。(A调用A)
  • 迭代(iteration)指重复反馈过程的活动,每一次迭代的结果会作为下一次迭代的初始值。(A重复调用B)

哈希表
涉及到的题目如:多数元素
哈希表(Hash Table,也叫散列表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做哈希函数,存放记录的数组称做哈希表。
哈希表是使用 O(1) 时间进行数据的插入删除和查找,所以在时间效率上来看哈希表有很大的优势,但是哈希表不保证表中数据的有序性,因此在哈希表中查找最大数据或者最小数据的时间是 O(N)。
在遇到一些诸如统计次数或者统计不同值的题目上,我们可以使用数组中的值作为哈希表中的key,出现的次数作为value。而因为哈希表的key是不会重复的,所以哈希表的size就可以知道有多少个不同的值。这种操作和思想还是挺常见的。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值