- 博客(4)
- 收藏
- 关注
转载 剑指offer 51. 数字排列
题目: 输入一组数字(可能包含重复数字),输出其所有的排列方式。 样例: 输入:[1,2,3] 输出: [ [1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], [3,2,1] ] 方法:(回溯法) 时间复杂度 O(n!) 1.先将所有数从小到大排序,使得相同的数排在一起; 2.从左到右依次枚举每个数,每次将它放在一个空位; 对于相同数,我们人为定序,避免重复计算 3.在dfs时记录一个额外的状态,记录上一个相同数存放的位置 start,我们在枚举当前数时,只枚举
2020-05-14 17:46:19 129
原创 剑指offer49. 二叉搜索树与双向链表
输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。 要求不能创建任何新的结点,只能调整树中结点指针的指向。 注意: 需要返回双向链表最左侧的节点。 例如,输入下图中左边的二叉搜索树,则输出右边的排序双向链表。 思路:实际上中序遍历的遍历顺序就是双线链表的建立顺序,用一个pre指针保存当前遍历结点的前一个结点,最后找到双向链表的头结点返回。 /** * Definition for a binary tree node. * struct TreeNode { * int val;
2020-05-13 11:17:36 89
转载 剑指offer55. 连续子数组的最大和
题目: 输入一个 非空 整型数组,数组里的数可能为正,也可能为负。 数组中一个或连续的多个整数组成一个子数组。 求所有子数组的和的最大值。 要求时间复杂度为O(n)。 样例: 样例 输入:[1, -2, 3, 10, -4, 7, 2, -5] 输出:18 class Solution { public://遇到小于0的元素,舍弃前面的数之和,sum重置为0,大于0的元素直接相加,比较最大值 int maxSubArray(vector<int>& nums) {
2020-05-13 11:04:08 83
原创 剑指offer54. 数据流中的中位数
如何得到一个数据流中的中位数? 如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。 如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。 样例: 输入:1, 2, 3, 4 输出:1,1.5,2,2.5 解释:每当数据流读入一个数据,就进行一次判断并输出当前的中位数。 思路:维护一个大根堆和一个小根堆,大根堆保存较小的那一半,小根堆保存较大的那一半。每次默认向大根堆里push元素。若插入元素逆序,则对换大,小根堆的堆顶元素保证递增。当大根堆元素个数超过小
2020-05-12 22:52:57 99
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人