摘要: 给定一个非空的整数数组,返回其中出现频率前 k 高的元素。 例如, 给定数组 [1,1,1,2,2,3] , 和 k = 2,返回 [1,2]。 注意: 你可以假设给定的 k 总是合理的,1 ≤ k ≤ 数组中不相同的元素的个数。 你的算法的时间复杂度必须优于 O(n log n) , n 是数组的 阅读全文
posted @ 2018-07-18 21:11 onlyandonly 阅读(176) 评论(0) 推荐(0) 编辑
摘要: 给定一个包含红色、白色和蓝色,一共 n 个元素的数组,原地对它们进行排序,使得相同颜色的元素相邻,并按照红色、白色、蓝色顺序排列。 此题中,我们使用整数 0、 1 和 2 分别表示红色、白色和蓝色。 注意:不能使用代码库中的排序函数来解决这道题。 示例: 进阶: 一个直观的解决方案是使用计数排序的两 阅读全文
posted @ 2018-07-18 21:00 onlyandonly 阅读(138) 评论(0) 推荐(0) 编辑
摘要: 给定一个二维网格和一个单词,找出该单词是否存在于网格中。 单词必须按照字母顺序,通过相邻的单元格内的字母构成,其中“相邻”单元格是那些水平相邻或垂直相邻的单元格。同一个单元格内的字母不允许被重复使用。 示例: 一开始只写了向四周搜索的递归,但是哪有那么简单。。由于正确的路径每个方向都有可能,所以需要 阅读全文
posted @ 2018-07-18 20:51 onlyandonly 阅读(553) 评论(0) 推荐(0) 编辑
摘要: 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。 说明:解集不能包含重复的子集。 示例: 回溯算法,递归的时候只能将后面的元素进栈。 阅读全文
posted @ 2018-07-18 20:47 onlyandonly 阅读(280) 评论(0) 推荐(0) 编辑
摘要: 给定一个没有重复数字的序列,返回其所有可能的全排列。 示例: 多了个visited的回溯。 有人用交换地方法解了这题,感觉很神奇,思路就是交换,递归,再交换回来,如此这样迭代下去。时空复杂度会小一点。 阅读全文
posted @ 2018-07-18 15:04 onlyandonly 阅读(112) 评论(0) 推荐(0) 编辑
摘要: 给出 n 代表生成括号的对数,请你写出一个函数,使其能够生成所有可能的并且有效的括号组合。 例如,给出 n = 3,生成结果为: 思路就是回溯算法。刚接触回溯算法还是有点复杂的,递归里各种条件判断搞得头晕。还有就是C的百万参数。。。 阅读全文
posted @ 2018-07-18 10:31 onlyandonly 阅读(191) 评论(0) 推荐(0) 编辑
摘要: 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例: 思路是回溯+递归,利用一个栈来存储字母。 具体实现就是,先用迭代存储一个字母,如果栈没满就递归并迭代存储字母,直到栈满再把栈里的内容扔到返回数组里,或者 阅读全文
posted @ 2018-07-17 21:55 onlyandonly 阅读(869) 评论(0) 推荐(0) 编辑
摘要: 给定一个由 '1'(陆地)和 '0'(水)组成的的二维网格,计算岛屿的数量。一个岛被水包围,并且它是通过水平方向或垂直方向上相邻的陆地连接而成的。你可以假设网格的四个边均被水包围。 示例 1: 示例 2: 一个简单的DFS,当碰到未访问过的陆地时,将其标为访问过,然后向四周搜索,直到四周都是水为止。 阅读全文
posted @ 2018-07-17 18:37 onlyandonly 阅读(173) 评论(0) 推荐(0) 编辑
摘要: 给定一个二叉搜索树,编写一个函数 kthSmallest 来查找其中第 k 个最小的元素。 说明:你可以假设 k 总是有效的,1 ≤ k ≤ 二叉搜索树元素个数。 示例 1: 示例 2: 一个中序遍历的搜索,递归或者栈。 阅读全文
posted @ 2018-07-17 17:06 onlyandonly 阅读(198) 评论(0) 推荐(0) 编辑
摘要: 给定一个二叉树 填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL。 初始状态下,所有 next 指针都被设置为 NULL。 说明: 你只能使用额外常数空间。 使用递归解题也符合要求,本题中递归程序占用的栈空间不算做额外的空间 阅读全文
posted @ 2018-07-17 16:44 onlyandonly 阅读(176) 评论(0) 推荐(0) 编辑