茶山刘大学吧 关注:189贴子:1,327

再战菜砖之巅,绝战LeetCode HOT 100!

取消只看楼主收藏回复


为了从一个胜利走向另一个胜利,每日来菜吧做一道题目的讲解呢,目标秋招赢麻麻


IP属地:浙江1楼2022-07-30 22:52回复
    day1没有准备呢,只能拿🐭🐭之前做过的来凑数了,之后在做新的了


    IP属地:浙江来自Android客户端2楼2022-07-30 22:55
    回复
      2025-12-23 00:24:59
      广告
      不感兴趣
      开通SVIP免广告
      第一题是在教我们认识哈希表,哈希表是根据键值对来直接访问数据的数据结构,因为不同的哈希函数对应的任意的不同的x产生的y值不同,对于进入哈希表的数,我们对其key求哈希值,然后将value放在对应的位置,这样我们在查询的时候就可以一下子找到对应所需的元素了。


      IP属地:浙江来自Android客户端3楼2022-07-30 23:08
      回复
        在python内部dict就是一个可以使用的哈希表。
        这道题给我们遍历一个整数数组,并找到整数数组内部和为目标值的两个元素的下表。
        暴力的解法是两次循环对每个元素进行遍历,固定一个元素后,遍历元素后方的所有元素,计算他们的和是否等于目标值,如果是则返回结果,此时的复杂度两次循环结果为O(N^2)。


        IP属地:浙江来自Android客户端4楼2022-07-30 23:09
        回复
          一种更优化的方式是使用哈希表,我们只用遍历一次即可,现将数组内容放入一个哈希表,key为他的值大小,value为他的下标。然后对nums元素进行遍历,对于每个元素,去寻找哈希表中时候有target-当前元素的key,并且这个key不能等于当前元素自身下标。这样就成功的找到了目标答案了。


          IP属地:浙江来自Android客户端5楼2022-07-30 23:10
          回复
            代码非常简单捏,然后进入哈希表的元素 如果有重复,比如说nums=[3,3]这种情况只用进一个就好,因为值相同target减去它不影响呢~


            IP属地:浙江来自Android客户端6楼2022-07-30 23:10
            回复
              提交的结果小win一手


              IP属地:浙江来自Android客户端7楼2022-07-30 23:11
              回复
                暴力解法没有慧根,被薄纱了吧



                IP属地:浙江来自Android客户端8楼2022-07-30 23:14
                回复
                  2025-12-23 00:18:59
                  广告
                  不感兴趣
                  开通SVIP免广告
                  day1 end


                  IP属地:浙江来自Android客户端9楼2022-07-30 23:14
                  收起回复
                    day2
                    今天疯狂摸鱼,但是为了🥬🧱的复兴,还是要准时上班捏


                    IP属地:浙江来自Android客户端16楼2022-07-31 22:46
                    回复
                      需要知道,什么是二叉搜索树:比如说一个2为根的二叉搜索树,那么它的左边所有元素一定是小于2的,而右侧的所有元素一定是大于2的,书面的语言是如果左子树不为空,那么左子树的所有节点都小于根节点,如果右子树不为空,右子树的所有节点都大于根节点。


                      IP属地:浙江来自Android客户端17楼2022-07-31 22:46
                      回复
                        这道题目,让我们计算从1到n互不相同的二叉搜索树有多少种,只需要求出数目即可,不需要返回具体的树的排列,因此使用深度优先DFS算法去求出每一种大概率会超时,而且要排除重复情况,没那么好写。


                        IP属地:浙江来自Android客户端19楼2022-07-31 22:47
                        回复
                          感觉上这种复杂的dfs能解决的问题可以通过动态规划来写,我们可以试着找到一种关系式。比如我们需要求1到5的所有的二叉搜索树,其实等同于以1以2以3到以5为根节点的所有二叉搜索树的和,这和dfs去遍历所有结果似乎有相似的地方,接着考虑怎么求这些二叉树。


                          IP属地:浙江来自Android客户端20楼2022-07-31 22:47
                          回复
                            比如以1为根的二叉搜索树,由于二叉搜索树的性质,左边一定是比1要小的,右侧一定是比1要大的,因此可以判断左右子树节点的个数。而且以1为根的二叉搜索树数目等于左子树搜索树的数目乘以右子树搜索树的数目,也就是对应的0个节点的左子搜索树数目乘以3个节点的右搜索数的数目,这样我们就似乎把搜索树个数联系起来了。


                            IP属地:浙江来自Android客户端21楼2022-07-31 22:47
                            回复
                              2025-12-23 00:12:59
                              广告
                              不感兴趣
                              开通SVIP免广告
                              一个二叉搜索树的所有数目,等于以它每个元素为根的二叉搜索树数目之和,以某个数为根的二叉搜索树的个数等于左子树个数乘以右子树个数,而左子树和右子树节点数目也是知道的,这里就可以写公式来动态规划啦


                              IP属地:浙江来自Android客户端22楼2022-07-31 22:49
                              回复