自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 排序总结

排序是较多次的使用了sort函数。计算两数组的交,要注意查重。合并区间的时候,用了vector中的back()函数。vector中元素的下标从零开始,返回元素时要注意下标。这部分题考察了对vector的掌握程度。每道题都用到了vector。这也是我们数据结构的最后一次作业。

2017-06-05 19:44:33 190

原创 两数组的交

题目:两数组的交问题描述:返回两个数组的交注意事项Each element in the result must be unique.The result can be in any order.样例nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2].思路:先排

2017-06-05 19:20:44 194

原创 合并区间

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

2017-06-05 17:10:38 399

原创 两数组的交||

问题描述:计算两个数组的交。样例nums1 = [1, 2, 2, 1], nums2 = [2, 2], 返回 [2, 2].实现思路:现将两个数组进行排序,首先将两数组的第一个元素进行比较,如果相等就加入到动态数组中,两数组的下标同时后移一位,否则哪个数组的元素较小,哪个数组的下标就往后移动一位。代码:class Solution {publ

2017-06-05 17:05:10 169

原创 中位数

问题描述:给定一个未排序的整数数组,找到其中位数。中位数是排序后数组的中间值,如果数组的个数是偶数个,则返回排序后数组的第N/2个数。实现思路:现将数组进行排序,如果数组的元素个数是偶数个那么返回地N/2个元素,该元素的下标为N/2-1;否则,返回元素的下标为N/2;代码:class Solution {public:    /**     *

2017-06-05 16:56:06 189

原创 整数排序

问题描述:给一组整数,按照升序排序。使用O(nlogn)的排序算法。实现思路:使用sort函数代码:class Solution {public:    /**     * @param A an integer array     * @return void     */    void sortIntegers2(vector& A) {

2017-06-05 16:53:18 145

原创 两数之和

问题描述:给一个整数数组,找到两个数使得他们的和等于一个给定数target,你需要实现的函数twoSum需要返回这两个数的下标,并且第一个下标小于第二个下标。注意这里的下标范围是1到n,不是以0开头。实现思路:对数组中的每一个数进行遍历,找到合适的就存进数组。用两个for循环进行嵌套。代码:class Solution {public:    /*

2017-05-19 18:24:21 173

原创 子数组之和

问题描述:给定一个整数数组,找到和为零的子数组。你的代码应该返回满足要求的子数组的起始位置和结束位置实现思路:定义一个动态数组,用来存放下标,从给定数组的第一个元素开始遍历,如果第一个元素等于零就直接结束,否则用两个for循环找到合适的下标存于动态数组中。代码:class Solution {public:    /**     * @param nums: A

2017-05-18 17:53:10 187

原创 convert bst to greater tree

问题描述: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 in BST

2017-05-18 17:22:15 165

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

问题描述:给定一颗二叉查找树和一个新的树节点,将节点插入到树中。你需要保证该树仍是一颗二叉查找树。实现思路:利用递归,如果该节点的值大于根节点的值插入右子树,否则插入左子树。代码:/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *

2017-05-18 17:13:12 273

原创 二叉树总结

二叉树这部分题主要利用递归。找好递归的出口。找路径的那部分题要注意清理现场。就比如一开始说忘了清理现场,就一直出现了runtime error。对二叉树进行反转的时候要从底端开始。二叉树的最小深度要考虑到斜树的情况,由于一开始未考虑到斜树的情况就一直错误。等等。

2017-04-21 16:59:32 195

原创 二叉树的路径和

问题描述:给定一个二叉树,找出所有路径中各节点相加总和等于给定目标值的路径。一个有效的路径,指的是从根结点到叶节点的路径。实现思路:找出所有路径,算出路径和,如果路径和等于目标值那么就将该路径加入vector中。最后返回该vector。/** * Definition of TreeNode: * class TreeNode { * public: *

2017-04-21 16:55:20 149

原创 将二叉树拆成链表

问题描述:将一颗二叉树按照前序遍历拆解成为一个假链表。所谓的假链表将一棵二叉树按照前序遍历拆解成为一个假链表。所谓的假链表是说,用二叉树的 right 指针,来表示链表中的 next 指针。

2017-04-21 16:40:52 237

原创 二叉树的所有路径

/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode(int val) { *         this->val = val; *         this->left = this

2017-04-20 17:30:05 178

原创 子树

问题描述:有两个不同大小的二进制树: T1 有上百万的节点; T2 有好几百的节点。请设计一种算法,判定 T2 是否为 T1的子树。 注意事项若 T1 中存在从节点 n 开始的子树与 T2 相同,我们称 T2 是 T1 的子树。也就是说,如果在 T1 节点 n 处将树砍断,砍断的部分将与 T2 完全相同。实现思路:判断是否为左右子树,首先要利用一

2017-04-20 16:58:51 136

原创 二叉树的层次遍历

问题描述:对一棵二叉树进行层次遍历实现思路:利用队列,在队尾增加,队头删除。在访问每一层时,先记住这一层的rear ,然后访问该层的节点,同时访问结点的左右子树增加在在队尾。当访问到该层的最后一个节点时,记住该队列rear的值。进行下一层的访问。代码:/** * Definition of TreeNode: * class TreeNode { * public:

2017-04-20 16:16:48 341

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

问题描述:把排序数组转化为高度最小的二叉搜索树。实现思路:初始时先把排序数组中间的值找出来作为根节点,分成了左右两部分数组,在利用递归对左右两部分进行相同的处理。代码:/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left,

2017-04-20 16:06:52 175

原创 二叉树的最小深度

问题描述:给定一棵二叉树找出其最小深度。实现思路:二叉树的最小深度和最大深度不同。需要考虑斜树的情况。实现代码:/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode

2017-04-12 20:48:21 145

原创 翻转二叉树

问题描述:实现思路:实现代码:/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode(int val) { *         this->val = val;

2017-04-12 20:23:08 127

原创 二叉树的最大节点

问题描述:在二叉树中寻找值最大的节点并返回。实现思路:先利用前序遍历把二叉树的每个节点的值存放于动态数组中。然后对动态数组中的节点的值进行比较,返回值最大的节点。实现代码:vector v;class Solution {public:    /**     * @param root the root of binary tree     * @retur

2017-04-10 21:42:26 434

原创 克隆二叉树

问题描述:深度复制一个二叉树。给定一个二叉树,返回一个他的克隆品。实现思路:利用递归,每次创建一个新节点,让它的值等于root的值。它的左子树等于root的左子树,它的右子树等于root的右子树。实现代码: * Definition of TreeNode: * class TreeNode { * public: *     int val; *     Tr

2017-04-10 21:15:38 198

原创 等价二叉树

问题描述:是否等价。等价的意思是说,首先两颗二叉树必须拥有相同的结构,并且每个对应位置上的节点上的数都相等。实现思路:利用递归,判断根节点的值,左子树的值,右子树的值。实现代码:/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNod

2017-04-10 21:05:07 251

原创 二叉树的最大深度

问题描述:给定一个二叉树,找其最大深度。二叉树的深度为根节点到最远叶子节点的距离。实现思路:实现代码:/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode(in

2017-04-09 16:01:09 180

原创 二叉树的后序遍历

问题描述:给出一棵二叉树,返回其节点值的后序遍历。实现思路:创建动态数组来存放节点的值。利用递归的思想。实现代码:/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode(in

2017-04-09 15:57:33 156

原创 二叉树的中序遍历

问题描述:给出一颗二叉树,返回其中序遍历。实现思路:创建动态数组来存放节点的值。利用遍历的方法。实现代码:/** * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left, *right; *     TreeNode(in

2017-04-09 15:52:41 351

原创 二叉树的前序遍历

问题描述给出一颗二叉树,返回其节点值的前序遍历。实现思路:创建一个动态数组存放每个节点的值。利用递归,先访问根,再访问左子树,最后访问右子树。最后返回向量V。实现代码:/ * Definition of TreeNode: * class TreeNode { * public: *     int val; *     TreeNode *left,

2017-04-09 15:42:10 165

原创 链表总结

链表总结         链表这一部分题,主要是对链表进行单链表遍历,插入,删除,排序,按值查找,按位查找,头插法建立单链表,尾插法建立单链表等操作。        单链表遍历:         单链表插入:插入第i个节点中,先找到第i-1个节点p。如果没有找到throw"位置",否则,申请一个新的节点,其数据域为x,将节点s插入到节点p之后。          单链表删除:删除第

2017-03-30 16:44:20 194

原创 链表求和

问题描述:你有两个用链表代表的整数,其中每一个节点包含一个数字,数字存储按照在原来整数中相反的顺序,使得第一个数字位于链表的开头。写出一个函数将两个整数相加,用链表形式返回和。实现思路:当两个链表均不为空时,对应的元素相加,保留进位。当其中有一个链表为空时,将近位加进另一个链表。如果加到最后一位还有进位,就创建一个新的节点,该节点的值等于该进位,该节点的next等于NULL。代码:

2017-03-30 16:25:13 390

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

问题描述:给一个链表,两两交换其中的节点,然后返回交换后的链表。实现思路:代码:/** * Definition for singly-linked list. * struct ListNode { *     int val; *     ListNode *next; *     ListNode(int x) : val(x), next(NUL

2017-03-30 16:07:49 151

原创 合并两个排序链表

问题描述:将两个排序链表合并为一个新的排序链表。实现思路:先考虑链表为空的情况,当两个链表不同时为空时。初始时,先比较两个链表第一个节点的值的大小。把节点小的插入新链表中,在节点值小的链表中向后移动一个节点。当其中有一个链表为空时,直接把另一个链表接在新链表中。代码:/** * Definition of ListNode * class ListNode { *

2017-03-29 19:54:00 132

原创 链表插入排序

问题描述:用插入排序堆链表排序。样例:Give 1->3->2->0->NULL,return  0->1->2->3->NULL。实现思路:先创建一个头节点,初始时,把原链表的第一个节点插入新链表作为第一个节点。然后依次读原链表的每个节点,把原链表中的节点插在第一个大于该节点 的值的节点之前。实现代码:/** * Definition of ListNode *

2017-03-29 19:22:43 297

原创 在O(1)时间复杂度删除链表节点

问题描述:给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在O(1)时间复杂度删除该链表节点。样例:给定1->2->3->4,和节点3,删除3之后,链表应该变为1->2->4。实现思路:先考虑特殊情况 if (node->next== NULL)。再考虑一般情况:先把该节点的下一个节点的值赋给该节点,再删除该节点的下一个节点。代码:void deleteNode(

2017-03-29 19:00:22 225

原创 链表划分

问题描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。应该保留两部分内链表节点原有的相对顺序。样例:给定链表 1->4->3->2->5->2->NULL,并且x=3           返回 1->2->2->4->3->5->NULL。实现思路:先创建两个头节点leftDummy和rightDummy,定义两个指针变量left和right。

2017-03-26 18:24:28 201

原创 翻转链表

问题描述:翻转一个链表样例:给出一个链表1->2->3->NULL,这个翻转后的链表为3->2->1->NULL。实现思路:代码: ListNode *reverse(ListNode *head) {        ListNode *p = NULL;        while (head != NULL) {            ListNode *

2017-03-26 16:20:43 112

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

问题描述:给定一个排序链表,删除所有重复的元素每个元素只留下一个。样例:给出1->1->2->NULL;返回1->2->NULL。实现思路:先考虑链表为空时的特殊情况;再考虑一般情况:定义两个指针变量p和q,初始时,P指向链表中的第一个元素,q指向链表中的第二个元素。如果p和q的值相等时,就删除q指针指向的节点。如果p和q的值不相等,则分别向后移一个节点。代码:ListNo

2017-03-26 15:55:37 142

原创 删除链表中的元素

问题描述:删除链表中等于给定值val的所有节点样例:给出链表1->2->3->3->4->5->3,和val=3,你需要返回的是删除3之后的链表:1->2->4->5。实现思路:如果链表为空直接返回NULL; ListNode *removeElements(ListNode *head, int val) {        if ( head == NULL )

2017-03-26 15:38:17 247

原创 删除链表中倒数第N个节点

1.问题描述:给定一个链表删除链表中倒数第N个节点,返回链表的头结点。2.实现思路:首先  ListNode *removeNthFromEnd(ListNode *head, int n) {        // write your code here        if (head == NULL) {            return NULL;        }

2017-03-26 15:16:28 172

原创 返回链表中的倒数第N个节点

1.基本问题描述:找到并返回链表中倒数第N个节点,保证链表中节点的最少数量为N。2.实现思路:首先利用IF函数得到链表的总节点数M个;链表中的倒数第N个节点就是该链表的第M-N+1个节点;找到该连表中的第M-N+1个节点,并返回该节点。3.代码: ListNode *nthToLast(ListNode* head, int n) {        // write your co

2017-03-25 20:49:17 658

空空如也

空空如也

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

TA关注的人

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