leetcode刷题总结201-250

201. 数字范围按位与

  描述:

    输入: [5,7]
    输出: 4

  思路:范围的数字每个数字右移一位。当都一样之后就可以停止了。然后把0添加上。

202. 快乐数

  描述:

    输入:19
    输出:true
    解释:
    12 + 92 = 82
    82 + 22 = 68
    62 + 82 = 100
    12 + 02 + 02 = 1

  思路:把每个数字按照逻辑计算即可。用一个hashset存储已经出现的数字,重复出现就停止。

203. 移除链表元素

204. 计数质数

  描述:

    输入: 10
    输出: 4
    解释: 小于 10 的质数一共有 4 个, 它们是 2, 3, 5, 7 。

  思路:编写一个函数用于判断这个数是质数(i从头遍历到根号N.)然后将1-10的数字是否是数字置为true,然后从头开始判断,偶数不判断,遇到质数,就把质数的倍数也置为false.

205. 同构字符串

  描述:

    输入: s = "egg", t = "add"
    输出: true

  思路:hashmap存储。

206. 反转链表

207. 课程表

  描述:

    输入: 2, [[1,0]]
    输出: true
    解释: 总共有 2 门课程。学习课程 1 之前,你需要完成课程 0。所以这是可能的。

  思路:图的拓扑。

208. 实现 Trie (前缀树)

209. 长度最小的子数组

  描述:

    输入:s = 7, nums = [2,3,1,2,4,3]
    输出:2
    解释:子数组 [4,3] 是该条件下的长度最小的子数组。

  思路:双指针控制窗口的长度。

210. 课程表 II

  描述:

    输入: 2, [[1,0]]
    输出: [0,1]
    解释: 总共有 2 门课程。要学习课程 1,你需要先完成课程 0。因此,正确的课程顺序为 [0,1] 。

  思路:图的拓扑排序。

211. 添加与搜索单词 - 数据结构设计

  描述:

  

 

 

   思路:字典树+回溯。

212. 单词搜索 II

  描述:

    

 

 

   思路:words先用字典树存储。然后在方格中上下左右遍历。其中用到回溯即可。

213. 打家劫舍 II

  思路:动态规划

214. 最短回文串

  描述:

    

 

 

   思路:可以将此字符串和反转进行拼接,用KMP算法求next数组。通过数组的值来

215. 数组中的第K个最大元素

  描述:

    

 

 

   思路:快速排序。比如先选3,最后决定了3的最终位置是第三个。那么k=2就在前面取快排继续找。

216. 组合总和 III

  描述:

    

 

 

   思路:回溯算法。

217. 存在重复元素

  思路:hash

218. 天际线问题

  描述:

    

 

 

   思路:分治。分治最终进行合并两个天际线。合并的时候需要考虑重合问题。先去处理x重合,ymax的情况。再去加上剩余的。

219. 存在重复元素 II

  描述:

    

 

 

   思路:hashset存储窗口

220. 存在重复元素 III

  描述:

    

 

 

   思路:treeset中的ceiling函数。用于处理t的范围。

221. 最大正方形

  描述:

    

 

 

   思路:动态规划。dp[i][j]代表当前点的最大正方形面积。dp[i][j]=min(i-1,j-1;i-1,j;i,j-1)+1(i,j为1的话)

222. 完全二叉树的节点个数

  描述:

    

 

 

   思路:递归。

223. 矩形面积

  描述:

    

 

 

   思路:两个相加-共同的。

224. 基本计算器

225. 用队列实现栈

226. 翻转二叉树

227. 基本计算器 II

228. 汇总区间

229. 求众数 II

  描述:

    

 

 

   思路:投票法。选取几个种子。当出现这个种子++;否则--;‘当小于0后换当前这个种子,最后统计。

230. 二叉搜索树中第K小的元素

  思路:深度优先进行中序遍历。

231. 2的幂

   思路:移位。

232. 用栈实现队列

233. 数字 1 的个数

  描述:

    输入: 13
    输出: 6
    解释: 数字 1 出现在以下数字中: 1, 10, 11, 12, 13 。

  思路:统计规律。

234. 回文链表

  描述:

    输入: 1->2->2->1

    输出: true

   思路:快慢双指针找到中点。反转后面的。然后开始遍历。

235. 二叉搜索树的最近公共祖先

  描述:

    

 

 

   思路:根节点判断都小于还是都大于,还是小于大于。

236. 二叉树的最近公共祖先

  描述:

    

 

 

   思路:递归查找。left,right。left=null证明都在右边。否则都在左边。left!=null&&right!=null  直接返回当前root

237. 删除链表中的节点

238. 除自身以外数组的乘积

  描述:

    输入: [1,2,3,4]
    输出: [24,12,8,6]

  思路:从左往右。从右往左。分别计算当前元素的前面的成绩。然后两个数组对应位置成绩。

239. 滑动窗口最大值

  描述

    

 

 

   思路:双端队列。保证队列的头部为当前窗口的最大值。队列记录的是当前最大值的下标,用于处理窗口的大小。队列是单调递减的。

240. 搜索二维矩阵 II

241. 为运算表达式设计优先级  

  描述:

    输入: "2*3-4*5"
    输出: [-34, -14, -10, -10, 10]
    解释:
        (2*(3-(4*5))) = -34
        ((2*3)-(4*5)) = -14
        ((2*(3-4))*5) = -10
        (2*((3-4)*5)) = -10
        (((2*3)-4)*5) = 10

  思路:通过运算符进行分治。

242. 有效的字母异位词

  描述:

    输入: s = "anagram", t = "nagaram"
    输出: true

  思路:hash

243-250。。。。

 

posted @ 2020-07-07 17:03  _Meditation  阅读(114)  评论(0编辑  收藏  举报