自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 收藏
  • 关注

原创 排序

选择排序、快速排序、希尔排序、堆排序不是稳定的排序算法,冒泡排序、插入排序、归并排序和基数排序是稳定的排序算法。冒泡法: 这是最原始,也是众所周知的最慢的算法了。他的名字的由来因为它的工作看来象是冒泡: 复杂度为O(n*n)。当数据为正序,将不会有交换。复杂度为O(0)。直接插入排序:O(n*n)选择排序:O(n*n)快速排序:平均时间复杂度log2(n)*n,所有内部排序

2017-06-15 17:09:39 212

原创 哈希表总结

哈希表这一模块比较类似大一学的C和C++,比较简单,只需设计一个函数满足题目要求。例如两数组的交和两数组的交 II只有重不重复出现相同元素,注意如何区别即可。

2017-06-15 17:06:04 204

原创 中位数

1、问题描述给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。给出数组[4, 5, 1, 2, 3], 返回 3给出数组[7, 9, 4, 5],返回 52、实现思路先用sort()函数排序,数组元素个数为偶数返回nums[(n-1)/2],数组元素个数为奇数返回nums[n/2]

2017-06-08 18:01:24 255

原创 合并区间

1、问题描述      给出若干闭合区间,合并所有重叠的部分。     样例  给出的区间列表 => 合并后的区间列表:样例给出的区间列表 => 合并后的区间列表:[ [ [1, 3], [1, 6], [2, 6], => [8, 10], [8, 10],

2017-06-08 17:44:38 246

原创 链表插入排序

1、问题描述      用插入排序对链表排序      样例 Given 1->3->2->0->null, return 0->1->2->3->null2、实现思路      将链表升序排列,p、q为一前一后结点比较大小,若pnext,重复上述步骤。3、代码/** * Definition of ListNode * class ListNode { * p

2017-06-08 17:24:39 182

原创 整数排序 II

1、问题描述      给一组整数,按照升序排序。使用归并排序,快速排序,堆排序或者任何其他 O(n log n) 的排序算法。      样例 给出 [3, 2, 1, 4, 5], 排序后的结果为 [1, 2, 3, 4, 5]。2、实现思路      归并排序,快速排序,堆排序是O(nlogn)的算法,vector中的sort()用的就是快速排序。3、代码class

2017-06-08 16:46:46 152

原创 子数组之和

1、问题描述    给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置。样例给出 [-3, 1, 2, -3, 4],返回[0, 2] 或者 [1, 3].2、实现思路    从第一个开始,固定其值,若其为0,起始和终止位置都为当前位置下标,不为零,则从下一个开始,依次加和,至零则找到终止位置坐标。3、代码clas

2017-05-23 12:31:15 165

原创 哈希函数

1、问题描述在数据结构中,哈希函数是用来将一个字符串(或任何其他类型)转化为小于哈希表大小且大于等于零的整数。一个好的哈希函数可以尽可能少地产生冲突。一种广泛使用的哈希函数算法是使用数值33,假设任何字符串都是基于33的一个大整数,比如:hashcode("abcd") = (ascii(a) * 33^3 + ascii(b) * 33^2 + ascii(c) *33 + asci

2017-05-23 12:29:39 1513

原创 快乐数

1、问题描述    写一个算法来判断一个数是不是"快乐数"。    一个数是不是快乐是这么定义的:对于一个正整数,每一次将该数替换为他每个位置上的数字的平方和,然后重复这个过程直到这个数变为1,或是无限循环但始终变不到1。如果可以变为1,那么这个数就是快乐数。样例19 就是一个快乐数。1^2 + 9^2 = 828^2 + 2^2 = 686^2 + 8^2 = 1

2017-05-20 23:40:03 391

原创 两数之和

1、问题描述给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1, 2].2、实现思路    先判断给

2017-05-20 23:14:36 162

原创 两数组的交 II

1、问题描述     计算两个数组的交     样例     nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].2、实现思路     将两个数组排序,nums1的每个元素依次和nums2中元素比较是否相等,因为排过序,若nums1中的元素比nums2中某位置的值小,一定比nums2此元素之后所有的小,不需要比较,比较过了的num

2017-05-18 18:01:02 130

原创 两数组的交

1、问题描述     返回两个数组的交     样例     nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].2、实现思路     将两个数组排序,nums1的每个元素依次和nums2中元素比较是否相等,如果nums1中有重复的只需要比较一个,因为排过序,若nums1中的元素比nums2中某位置的值小,一定比nums2此元素之后所有

2017-05-18 17:51:45 166

原创 二叉查找树总结

1、首先了解二叉排序树的性质:若它的左子树不空,左子树上所有节点的值均小于根节点的值;若它的右子树不空,右子树上所有节点的值均大于根节点的值;它的左右子树也都是二叉排序树。2、Convert BST to Greater Tree题进行反的中序遍历,结点的值 = 该结点的值 + 所有比它大的结点的值的和,最后的二叉树实际与二叉排序树相反。

2017-05-18 17:50:06 315

原创 在二叉查找树中插入节点

1、问题描述      给定一棵二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍然是一棵二叉查找树。样例给出如下一棵二叉查找树,在插入节点6之后这棵二叉查找树可以是这样的: 2 2 / \ / \1 4 --> 1 4 / / \ 3 3

2017-05-18 17:38:29 451

原创 Convert BST to Greater Tree

1、问题描述     Given a Binary Search Tree (BST), convert it to a Greater Tree such that every key of the original BST is changed to the original key plus sum of all keys greater than the original key

2017-05-18 17:28:43 136

原创 二叉树总结

关于二叉树问题,由于其本身固有的递归属性,通常我们可以用递归算法来解决。遍历是二叉树各种操作的基础,可以在遍历过程中对结点进行各种操作。一、二叉树的遍历  由二叉树的定义可知,一颗二叉树由根节点及左、右子树三个基本部分组成,因此,只要依次遍历这三部分,就可以遍历整个二叉树。  1.先序遍历:  先序遍历的递归过程为:若二叉树为空,遍历结束。否则,  (1)访

2017-04-21 21:47:37 192

原创 二叉树的路径和

1、问题描述      给定一个二叉树,找出所有路径中各节点相加总和等于给定 目标值 的路径。一个有效的路径,指的是从根节点到叶节点的路径。样例给定一个二叉树,和 目标值 = 5: 1 / \ 2 4 / \ 2 3返回:[ [1, 2, 2], [1, 4]]2、实现思路      找到路径和为给定数值的路径

2017-04-21 21:25:30 253

原创 把排序数组转换为高度最小的二叉搜索树

1、问题描述       给一个排序数组(从小到大),将其转换为一棵高度最小的排序二叉树。样例     给出数组 [1,2,3,4,5,6,7], 返回 4 / \ 2 6 / \ / \1 3 5 72、实现思路      数组的中间值来作为二叉树的根节点,左子树根节点为数组第一个数值到根节点的中间值,右子树的

2017-04-20 16:42:01 260

原创 子树

1、问题描述      有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。样例     下面的例子中 T2 是 T1 的子树: 1 3 / \ / T1 = 2 3 T2 = 4 /

2017-04-20 16:39:31 174

原创 二叉树的所有路径

1、问题描述      给一棵二叉树,找出从根节点到叶子节点的所有路径。样例    给出下面这棵二叉树: 1 / \2 3 \ 5    所有根到叶子的路径为:[ "1->2->5", "1->3"]2、实现思路      遍历二叉树,直到遇到叶子节点,将此路径上节点的值变为字符串,用to_string(int valu

2017-04-20 16:21:28 238

原创 二叉树的层次遍历

1、问题描述      给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)。给一棵二叉树 {3,9,20,#,#,15,7} : 3 / \9 20 / \ 15 7返回他的分层遍历结果:[ [3], [9,20], [15,7]]2、实现思路      由于二叉树是从左至右进行输入,故层次遍历通过队列存储每层的结点,它存

2017-04-15 13:05:03 248

原创 二叉树的最大深度

1、问题描述      给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的距离。样例:给出一棵如下的二叉树: 1 / \ 2 3 / \ 4 5这个二叉树的最大深度为3.2、实现思路      从根节点开始依次遍历每一颗子树,记录深度,比较得最大深度。3、代码/** * Definition of TreeNo

2017-04-15 06:46:51 124

原创 二叉树的最小深度

1、问题描述      给定一个二叉树,找出其最小深度。二叉树的最小深度为根节点到最近叶子节点的距离。2、实现思路3、代码4、感想

2017-04-14 14:31:59 191

原创 将二叉树拆成链表

1、问题描述       将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。样例 1 \ 1 2 / \ \ 2 5 => 3 / \ \ \ 3 4

2017-04-14 13:49:16 199

原创 翻转二叉树

1、问题描述     翻转一棵二叉树。样例 1 1 / \ / \2 3 => 3 2 / \ 4 42、实现思路      将同一节点的左右子树交换。3、代码/** * Definition of TreeNode: * class TreeNode { * publ

2017-04-13 17:32:51 139

原创 等价二叉树

1、问题描述      检查两棵二叉树是否等价。等价的意思是说,首先两棵二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。2、实现思路     从a,b两个数的根节点开始进行遍历,当一棵树节点有值一棵无值,输出false,当两节点值不同时输出false,两节点值相同时,继续遍历其左右结点,直至左右节点两树对应为空时输出true。3、代码/** * Defini

2017-04-13 17:20:11 403

原创 克隆二叉树

1、问题描述      深度复制一个二叉树。给定一个二叉树,返回一个他的 克隆品 。2、实现思路      类似于前序遍历,遍历原树的所有节点,将值赋值给新的树。3、代码/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left,

2017-04-13 17:00:37 147

原创 二叉树的最大节点

1、问题描述     在二叉树中寻找值最大的节点并返回。     给出如下一棵二叉树:       1     /     \  -5       2 /  \     /    \0  3  -4    -5    返回值为 3 的节点。2、实现思路     从根节点开始前序遍历,与其左右子树结点值比较,a为遍历过的最大节点,a与接下来遍历的节点进行比

2017-04-13 16:26:16 889

原创 二叉树的后序遍历

1、问题描述     给出一棵二叉树,返回其节点值的后序遍历。给出一棵二叉树 {1,#,2,3},     1        \         2        /     3     返回 [3,2,1]2、问题实现      与前序遍历、中序遍历类似。若二叉树为空,则空操作返回。否则后序遍历根节点的左子树,后序遍历根节点的右子树,访问根节点。3、代

2017-04-10 22:41:23 296

原创 二叉树的中序遍历

1、问题描述      给出一棵二叉树,返回其中序遍历,给出二叉树 {1,#,2,3},      1          \            2          /     3    返回 [1,3,2].2、实现思路      与前序遍历类似。若二叉树为空,则空操作返回。否则中序遍历根节点的左子树,访问根节点,中序遍历根节点的右子树。3、代码

2017-04-10 22:31:51 172

原创 二叉树的前序遍历

1、问题描述     给出一棵二叉树,返回其节点值的前序遍历。给出一棵二叉树 {1,#,2,3},      1        \         2        /      3    返回 [1,2,3].2、实现思路3、代码/** * Definition of TreeNode: * class TreeNode { * publi

2017-04-10 21:56:45 265

原创 链表总结

1、在O(1)时间复杂度删除链表节点      将给定节点删除,让其值等于其下一个的值,此时此节点的指针指向其后两个节点的位置。2、链表倒数第n个节点 删除链表倒数第n个节点      先用累加器计算出链表中元素的个数,然后从头结点开始找到倒数第n个节点(即第count-n+1个节点)。删除即再结合O(1)时间复杂度删除链表节点。3、删除链表中的元素      从第一个元素开始

2017-03-30 16:02:12 319

原创 两两交换链表中的节点

1、问题描述      给一个链表,两两交换其中的节点,然后返回交换后的链表。给出 1->2->3->4, 你应该返回的链表是 2->1->4->3。2、实现思路      若链表为空或只有一个元素直接返回,两两交换,先记下第一个结点的值,将后一个节点的值赋给前一个节点,后一个节点等于记下的前一个节点的值。然后节点后移两个。3、代码/** * Definition for

2017-03-27 23:06:15 195

原创 合并两个排序链表

1、问题描述      将两个排序链表合并为一个新的排序链表。给出 1->3->8->11->15->null,2->null, 返回1->2->3->8->11->15->null。2、实现思路3、代码/** * Definition of ListNode * class ListNode { * public: *     int val; *     L

2017-03-27 22:47:03 246

原创 链表划分

1、问题描述      给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。给定链表 1->4->3->2->5->2->null,并且 x=3,返回 1->2->2->4->3->5->null2、实现思路     创建两个链表,leftDummy和rightDummy分别代表小于和大于等于val的链表,head

2017-03-26 16:27:00 444

原创 链表插入排序

1、问题描述      用插入排序对链表排序,Given 1->3->2->0->null, return 0->1->2->3->null2、实现思路     链表是从小到大排列的,若前一个比后一个大,后一个需要从前面找到合适的位置重新排序,用p、q代表前后相邻的节点,当p>q,时用一个新节点从头找到最后一个比q小的,将p插到其后,否则p、q依次向后移动。3、代码/** 

2017-03-26 15:10:56 162

原创 链表求和

1、问题描述      你有两个用链表代表的整数,其中每个节点包含一个数字。数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。给出两个链表 3->1->5->null 和 5->9->2->null,返回 8->0->8->null2、实现思路     有3种情况,第一:两个链表一样长;第二:两个链表非空但不一样长;第三:有

2017-03-26 13:23:42 1136

原创 翻转链表

1、问题描述      翻转一个链表,给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null2、实现思路     将后面的元素依次前移,head后移与最后的元素交换位置,再成为前移元素的下一个。3、代码/** * Definition of ListNode *  * class ListNode { * public: *  

2017-03-26 13:21:34 124

原创 删除链表中的元素

1、问题描述      删除链表中等于给定值val的所有节点。给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。2、实现思路      遍历链表,若值等于val,此结点删除,否则依次检验。3、代码/** * Definition for singly-linked list. * struct L

2017-03-26 12:49:21 202

原创 删除排序链表中的重复元素

1、问题简介      给定一个排序链表,删除所有重复的元素每个元素只留下一个。给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->null2、实现思路      用两个节点,如果两个元素相同,同时向后移一位。3、代码/** * Definition of ListNode * class

2017-03-22 22:50:44 158

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除