第一题 277. Find the Celebrity
题目描述
给定n个人,需要找出其中的名人。名人的规则是,其余所有人都知道他,但是他不知道任何其他人。
算法
O(n^2)的方法
|
|
O(n)的方法
这个方法需要两次循环,第一次循环找到可能的候选人。候选人的选择条件是(假设是k),前面k-1个人都有认识的人。从k+1到结尾,k不认识任何人
第二次循环对这个候选人进行验证
第二题 74. Search a 2D Matrix
题目描述
在一个2维数组中,找是否存在目标值。这个数组满足,下一行的头一个数字,小于上一行的最后一个数字。
算法
一维解决
可以将其看作一个一维数组,转化的方式如下:
n m matrix convert to an array => matrix[x][y] => a[x m + y]
an array convert to n * m matrix => a[x] =>matrix[x / m][x % m];
|
|
二维数组正常解决
|
|
第三题 240. Search a 2D Matrix II
题目描述
编写一个高效的算法,从一个m × n矩阵中寻找一个值。矩阵具有如下性质:
每一行的整数从左向右递增
每一列的整数从上往下递增
测试样例见题目描述。
算法
从右上角开始,由于每行和每列都是递增的,因此我们可以通过大于小于关系排除不不符合要求的行或者列。
|
|
第四题 120. Triangle
题目描述
给定一个三角形结构的二维数组,求从上到下最短的路径
算法
动态规划
二维举证据进行存储
|
|
利用一维矩阵
|
|
第五题 548. Split Array with Equal Sum
题目描述
给定包含n个整数的数组,判断是否存在三元组(i, j, k)满足下列条件:
- 0 < i, i + 1 < j, j + 1 < k < n - 1
- 子数组和 (0, i - 1), (i + 1, j - 1), (j + 1, k - 1) 以及 (k + 1, n - 1) 相等
我们定义子数组(L, R)为原始数组从L到R的切片,包含边界。
注意:
1 <= n <= 2000.
给定数组元素范围 [-1,000,000, 1,000,000].
算法
由于题目要求用3个点把一个数组分割成四段,如果四段的和相同,就回复true如果没有这样的3个点,回复false. 我们可以先将这个数组切为两段,在这两段中分别找看是否有相同的值,然后再看另外一个Array中是否有相同的切分方法
|
|
第六题 105. Construct Binary Tree from Preorder and Inorder Traversal
题目描述
给定一个preorder和inorder遍历的数组,要求重构出二叉树
算法
如果preorder[0] 的数实在inorder[5]的位置,说明 0 - 4 是其左子树,6 - n-1是其右子树。
这样,我们就可以通过回溯的方法建造出整棵树
|
|
第七题 106. Construct Binary Tree from Inorder and Postorder Traversal
题目描述
知道中序和后序遍历的情况下,建出整个二叉树
算法
思路与上一题相似
|
|
第八题 34. Search for a Range
题目描述
在Array中,找到目标值的[begin, end]区间,其中可能包含重复的数字。
算法
分别向左和向右趋近与targe的值。
|
|
第九题 624. Maximum Distance in Arrays
题目描述
给定一组数组arrays,各数组递增有序,求不同数组之间最小值、最大值之间差值绝对值的最大值。
算法
由于需要在不同的数组间挑选最大和最小,我们每次都用当前的数组的最小和最大和原始的最大和最小进行对比,这样就不会出现问题。
|
|
第十题 605. Can Place Flowers
题目描述
给定数组flowerbed表示一个花床,0表示位置为空,1表示位置非空。花不能相邻种植,即不能出现相邻的1。
给定想要种植的花朵数目n,判断是否可以满足要求。
算法
将可以种花的地方种上花,如果满足就return true
|
|