leetcode刷题总结101-150

Posted dhname

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了leetcode刷题总结101-150相关的知识,希望对你有一定的参考价值。

101. 对称二叉树

  描述: 

    技术图片

 

 

   思路: 递归。考虑左子树的最右节点和右子树的最左节点对称。

102. 二叉树的层序遍历

  描述:

    技术图片

 

 

   思路:递归。维护一个List<List<Node>> (List.get(迭代次数).add(xxxx))

103. 二叉树的锯齿形层次遍历

  描述: 

    技术图片

 

 

   思路:递归。先右再左。

104. 二叉树的最大深度

  描述:

    技术图片

 

 

   思路: 递归

105. 从前序与中序遍历序列构造二叉树

106. 从中序与后序遍历序列构造二叉树

107. 二叉树的层次遍历 II

  描述:

    技术图片

 

 

   思路:递归。

108. 将有序数组转换为二叉搜索树

  描述:

    技术图片

 

 

   思路: 因为是平衡二叉树,所以根节点先求出(index=low+(high-low)/2),然后分治递归。

109. 有序链表转换二叉搜索树

  描述:

    技术图片

 

 

   思路:快慢指针求出index。

110. 平衡二叉树

  描述:

    技术图片

 

 

   思路:递归

111. 二叉树的最小深度

  描述:

    技术图片

 

 

   思路:递归+判断(当前深度大于已经知道的最小,直接跳出。)

112. 路径总和

  描述:

    技术图片

 

 

   思路:回溯。

113. 路径总和 II

  描述:

    技术图片

 

 

   思路;回溯。

114. 二叉树展开为链表

  描述;

    技术图片

 

 

   思路:把左子树接到根节点的右边,原右子树接到左子树的最右边。递归。

115. 不同的子序列

  描述:

    输入:S = "rabbbit", T = "rabbit"
    输出:3

  思路:动态规划。dp[i][j]表示s[0-i]表示t[]0-j[的次数

116. 填充每个节点的下一个右侧节点指针

  描述:

    技术图片

 

 

   思路:递归。每次递归把当前的右节点指向当前的next的左节点。

117. 填充每个节点的下一个右侧节点指针 II

  描述:

    技术图片

 

 

   思路:递归。每次把当前的左节点指向右节点(若右节点为空,指向当前节点的next的做左节点,若为空,为右节点。)

118. 杨辉三角

119. 杨辉三角 II

120. 三角形最小路径和

思路:动态规划

121. 买卖股票的最佳时机

  描述:

    技术图片

 

 

   思路:单调栈。动态规划.dp[i][j][k]第i天j为交易次数,k为此时的股票(保持。卖出)的状态。此题k的个数=1

122. 买卖股票的最佳时机 II

  描述:

    技术图片

 

 

   思路:贪心。

123. 买卖股票的最佳时机 III

  描述:

    技术图片

 

 

   思路:动态规划。

124. 二叉树中的最大路径和

  描述:

    技术图片

 

 

   思路:某一结点的最大路径和=此节点的value+左节点的最大贡献值+右节点的最大贡献值。

125. 验证回文串

  描述:

    技术图片

 

 

   思路:双指针

126. 单词接龙 II

  描述:

    技术图片

 

 

   思路:构件图,遍历(DFSBFS)。

127. 单词接龙

  描述:

    技术图片

 

 

   思路:构件图,BFS找最短路径

128. 最长连续序列

  描述:

    输入: [100, 4, 200, 1, 3, 2]
    输出: 4

    解释: 最长连续序列是 [1, 2, 3, 4]。它的长度为 4。

  思路:第一遍先存到hashset。然后看num-1是否存在sets,然后开始num+1  +2找

129. 求根到叶子节点数字之和

  描述:

    技术图片

 

 

   思路:递归

130. 被围绕的区域

  描述:

    技术图片

 

 

   思路:四个边保持,内部遍历(遇到O,判断上下左右是否有x)

131. 分割回文串

  描述:

    技术图片

  思路:回溯。

132. 分割回文串 II

 

 

   描述:

    输入: "aab"
    输出: 1
    解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文子串。

   思路:回溯+剪枝

133. 克隆图

  描述:

    技术图片

 

 

   思路: 遍历即可。

134. 加油站

  描述:

    技术图片

 

 

   思路:cost[i]>gas[i]跳過,找起始點。

135. 分发糖果

  描述:

    技术图片

 

 

   思路:从左边和从右边分别开始遍历。然后取最高。

136. 只出现一次的数字

  描述:

    输入: [2,2,1]
    输出: 1

  思路: 全部异或。

137. 只出现一次的数字 II

  描述:

    输入: [2,2,3,2]
    输出: 3

  思路:hashmap。或者:   通过once_seen;twice_seen来记录出现1次和2次。

138. 复制带随机指针的链表

  描述:

    技术图片

 

   思路:相当于把每个先插入其源节点的后面。7,7,13,13.。。。然后再拆分。

139. 单词拆分

  描述:

    输入: s = "leetcode", wordDict = ["leet", "code"]
    输出: true
    解释: 返回 true 因为 "leetcode" 可以被拆分成 "leet code"。
  思路:回溯+剪枝。动态规划

140. 单词拆分 II

  描述:

    输入:
      s = "catsanddog"
      wordDict = ["cat", "cats", "and", "sand", "dog"]
    输出:
      [
        "cats and dog",
        "cat sand dog"
      ]

  思路:回溯+剪枝

141. 环形链表

  描述:

    技术图片

 

   思路:hasseen(set)

142. 环形链表 II

  描述:

    技术图片

 

   思路:双指针+hasseen

143. 重排链表

  描述:

    给定链表 1->2->3->4->5, 重新排列为 1->5->2->4->3.

  思路:快慢指针确定中间节点,然后分隔,将后面的逆序。然后拼接。

144. 二叉树的前序遍历

145. 二叉树的后序遍历

  思路:递归。

146. LRU缓存机制

  思路:hashmap+linkedList. (Linkedhashmap)

147. 对链表进行插入排序

  思路:指针遍历插入即可。

148. 排序链表

  思路;二分。

149. 直线上最多的点数

  描述:

    技术图片

 

   思路:N^2的复杂度。计算斜率是否相等,

150. 逆波兰表达式求值 

  思路:栈

 

以上是关于leetcode刷题总结101-150的主要内容,如果未能解决你的问题,请参考以下文章

Leetcode 动态规划刷题总结

leetcode之贪心算法刷题总结1

leetcode之模拟刷题总结2

leetcode之深度优先搜索刷题总结1

leetcode之动态规划刷题总结1(Java)

Leetcode刷题Python LeetCode 2038. 如果相邻两个颜色均相同则删除当前颜色