甲乙小朋友的房子

甲乙小朋友很笨,但甲乙小朋友不会放弃

0%

算法-题目集锦

本文总结做过的题,和关键思路。

二分查找

题号 题目 描述 关键思路
数组
34 Search for a range 给int[] {5,7,7,8,8,10],找到target=8出现的范围[3,4]。没找到返回[-1,-1] 二分
35 Search Insert Position 有序无重数组[1,3,5,6],把target=5插入,问插入的位置=2 二分
74 Search a 2D Matrix 严格行、列、换行递增的二维数组,找target 二分
240 Search a 2D Matrix II 行、列递增的二维数组,但换行不一定递增。找target 每行二分,或从左下开始寻找
278 First Bad Version 版本号是从 1 到 n 的整数。某一天,有人提交了错误版本的代码,因此造成自身及之后版本的代码在单元测试中均出错。请找出第一个错误的版本号 二分,巧妙下标赋值
162 Find Peak Element 给一个数组。找峰值。相邻两个数都不一样。如果有多个峰值,就随便输出一个 二分
1901 Find a Peak Element II 二维数组。找四周峰值。相邻两个数都不一样。如果有多个峰值,就随便输出一个 二分
153 Find Minimum in rotated sorted array 找有序、无重、旋转数组(首位相接)中的最小值 二分
154 Find Minimum in rotated sorted array II 找有序、有重、旋转数组(首位相接)中的最小值 二分+精妙边界处理
33 Search in Rotated Sorted Array 从有序、无重、旋转数组(首位相接)中找target 二分+精妙边界处理
81 Search in Rotated Sorted Array II 从有序、有重、旋转数组(首位相接)中找target 二分+精妙边界处理
4 Median of two Sorted Arrays 找到两个有序数组的中位数 二分。太难了,没搞定。思路在《二分查找》里面
木材加工 把一些木头切成长度相同的小段木头,需要得到的小段的数目至少为 k。计算能够得到的小段木头的最大长度 将“最大长度”二分查找
374 Guess Number Higher or Lower A出一个1~n之间的数字,B猜为k。每次调用guess(k)时,返回:-1=猜大了,1=猜小了,0=猜对了。实现一个函数,模拟B猜测数字的过程,最终输出A心里的数字 二分

数组与数

题号 题目 描述 关键思路
数组
88 Merge Sorted Array 给两个排序数组,A,B,将B合并进A 从尾开始
349 Intersection of Two Arrays 求两个数组的交集 先排序
稀疏数组点乘 跳过0/建索引
第K大 堆、快速选择

二叉树与分治法

题号 题目 描述 关键思路
104 Maximum Depth of Binary Tree 求二叉树的最大深度 分治
110 Balanced Binary Tree 判断一个树是不是平衡二叉树 分治
236 ※ Lowest Common Ancestor 求两个节点的最近公共祖先 分治
124 Binary Tree Maximum Path Sum 给一个二叉树,找到从any node 到 any node最大路径和。路径可以在任何地方被结束掉 分治
226 Invert Binary Tree 将二叉树镜像反转(左右替换) 分治
98 Validate Binary Search Tree 验证一个二叉树是不是搜索二叉树 分治
173 Binary search Tree Iterator 中序、依次输出搜索二叉树 中序遍历
108 Convert Sorted Array to Binary Search Tree 将有序数组转化为平衡二叉树 分治
109 Convert Sorted List to Binary Search Tree 将有序链表转化为平衡二叉树 中序遍历,骚操作
还有几道题。等之后二刷
102 Binary Tree Level Order Traversal 二叉树层序遍历 队列
107 Binary Tree Level Order Traversal II 二叉树层序遍历,从最下层开始 队列
103 Binary Tree Zigzag Level Order Traversal 输出二叉树的锯齿形、层序遍历 队列
199 Binary Tree Right Side Viewl 给一个二叉树。从最右边看去,能看到的数字都是几 队列
还有几道题。等之后二刷
144 Binary Tree Preorder Traversal 二叉树的前序遍历
114 ※ Flatten Binary Tree to Linked List 将二叉树按照前序遍历的顺序变为只包含node.right的单链表 栈,巧妙只push right,还有两种骚操作
331 ※ Verify Preorder Serialization of a Binary Tree 验证一个序列是否是二叉树的前序遍历 分治法
145 ※ Binary Tree Postorder Traversal 二叉树的后序遍历 栈+hashset,还有一种栈+linkedList的骚操作
572 Subtree of Another Tree 给两个二叉树s和t。判断t是否是s的子树 两个二叉树同时遍历
106 Construct Binary Tree from Inorder and Postorder Traversal 用中序+后序恢复二叉树 分治

动态规划

题号 题目 描述 关键思路
64 Minimum Path Sum 从左上走到右下。只能向右向下走。求最小路径 dp
62 Unique Paths 从左上走到右下。只能向右向下走。求方案个数 dp
63 Unique Paths II 路上有障碍的上一题 dp
688 Knight Probability in Chessboard 给一个n*n的棋盘,每次可以走八个方向,如图所示。求从[r,c] 出发走K步之后它还停留在棋盘上的概率 dp
576 Out of Boundary paths 给一个m*n 的棋盘,每次可以走向上下左右四个方向。可以走回头路。求问在N步限制下,有多少种走出棋盘的方法 dp
70 Climbing Stairs 有一个楼梯,一步只能跨1/2步。问从0走到n层有多少层方案 dp
55 Jump Game 给一个数组A,A[i]表示在这里时最多可以跳A[i]步。只能向前跳。从数组A的第0位置出发,能不能跳到末尾。 dp/贪心
45 Jump Game II 给一个数组A,A[i]表示在这里时最多可以跳A[i]步。只能向前跳。从数组A的第0位置出发跳槽最后一个位置(假设一定能跳到),问最少的跳的次数 dp/贪心
300 ※ Longest Increasing Subsequence 求最长严格递增的子序列(子序列:可以跳着选 dp
354 ※ Russian Doll Envelopes 俄罗斯套娃信封。给一堆信封pair - [w,h] 。要求如果信封A的宽高都小于B的话,那么A就可以放入B。求这堆信封最多能套多少层 dp
673 Number of Longest Increasing Subsequence 求一个数组的最长递增子序列的个数 dp

题号 题目 描述 关键思路
295 Find Median from Data Stream 求动态数组的实时中位数 两个堆,一个比中位数大,一个都比中位数小
347 给一个int[],输出频率最高的k个数字 hashmap+堆