leetcode
douniwanli
学习从来都是一件困难的事情
展开
-
2-找两个有序数组的中位数
2-找两个有序数组的中位数 题目:There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median of the two sorted arrays. The overall run time complexity should be O(log (m+n)).1.步骤原创 2017-03-19 18:54:21 · 337 阅读 · 0 评论 -
15.剑指offer-按照之字形打印二叉树
1.题目 请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。2.基本想法 1 / \ 3 4 / \ / \ 5 6 7 8上一层和下一层输出顺序相反,那么很容易想到使用栈。对节点1来说,入栈顺序应为3,4;3为1的左子节点,4为1的右子节点。原创 2017-05-03 16:09:17 · 247 阅读 · 0 评论 -
16.剑指offer-序列化二叉树
1.题目 请实现两个函数,分别用来序列化和反序列化二叉树二叉树节点的定义:struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }}原创 2017-05-04 11:45:06 · 277 阅读 · 0 评论 -
17.剑指offer-旋转数组的最小数字
1.问题描述 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。2.基本想法设数组为A。下文中的分界线指的是数组中分界线左边的元素是非递减的,右边的元素是非递增的。笨办法,原创 2017-05-05 21:15:38 · 201 阅读 · 0 评论 -
20.剑指offer-数组中的逆序对
1.题目 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%10000000072.基本思路考察的是归并排序,计算次数时候是在执行合并操作的时候(合并两个有序的表)。设数组为A,将p~q和q+1~r之间的元素合并。设s=p,t=q+1,则逆序对数目计算如原创 2017-05-15 13:45:49 · 230 阅读 · 0 评论 -
1.leetcode-字符串处理函数atoi的书写
2_字符串处理函数atoi的书写函数形式int strToInt(const char *str);要注意的问题:如果输入是一个空的字符串要如何处理?你要返回什么?如果返回是0的话,那么如果真的是0,如何区别?返回0,和真正0的区别,在于多输出一个提示语句。如果输入的指针是一个NULL要如何处理?返回0负数要如何处理?判断第一个字符是不是’-‘溢出要如何处理?正向溢出,返回最大值原创 2017-04-07 23:49:36 · 358 阅读 · 0 评论 -
2.leetcode-Reverse Integer
1.题目描述 Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -3212.基本想法这道题就是翻转数字,本身看着没有难度。难点在于:此种题目一般要考虑的情况都非常多。求出int类型最大正数与最大负数?如果输入用例是最大整数与最大负数,它们的处理情况原创 2017-05-07 22:36:17 · 167 阅读 · 0 评论 -
2.leetcode-判断一个数字是不是回文
1.题目描述 Determine whether an integer is a palindrome. Do this without extra space.判断一个数字是不是回文2.基本想法将这个数字逆置过来,比如123 逆置结果为321,而后判断逆置的结果是不是和原数字相等题目简单,一般考虑情况都比较多如果输入是负数? 根据结果,系统默认的是输出为false如果输入是0? 输出原创 2017-05-08 18:08:03 · 282 阅读 · 0 评论 -
18.剑指offer-连续子数组的最大和
1.题目 HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。你会不会被他忽悠住?(子向量的长原创 2017-05-09 21:48:12 · 151 阅读 · 0 评论 -
2.剑指offer-数组中滑动窗口的最大值
2.剑指offer-数组中滑动窗口的最大值1.问题描述原创 2017-04-27 15:17:03 · 317 阅读 · 0 评论 -
21.剑指offer-数组中重复的数字
1.题目 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。2. 思路思路1:使用hash表思路2:(来自剑指offer)如果数组中只有一个重复的数字,则我们可以将数组中的数字依次异或,最后得到的就是那个只出现一次的数字(因为两个相同的数字异或为0),但是现在数组中存在两个重复的数字。假设我们将数组分成两个子数组,每一个子数组只包含一个只重复一次的原创 2017-05-15 16:42:25 · 267 阅读 · 0 评论 -
19.剑指offer-把数组排成最小的数
1.题目 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。2. 基本思路 我们将输入数组变换成字符串,如果我们能事先对其排序,如{‘3’,’32’,‘321’}排序成{‘321’,‘32’,’3‘},则最后再将排序好的字符串重新串连起来,那么就为要求的输原创 2017-05-11 11:58:22 · 336 阅读 · 0 评论 -
14.剑指offer-判断一颗二叉树是否对称
1.题目描述 请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的.二叉树结构:struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), le原创 2017-05-03 11:25:18 · 4101 阅读 · 0 评论 -
3.剑指offer-合并两个有序的链表
3_剑指offer-合并两个有序的链表1.题目要求 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。要求辅助空间是O(1)O(1)2. 想法假设两个链表的头指针分别是pHead1和pHead2.基本想法是:用一个指针p指向合成链表的尾节点,p1指向pHead1链表中等待比较的节点,p2指向pHead2链表中等待比较的节点,那么每一次比较p1指向的节点原创 2017-04-28 11:40:39 · 153 阅读 · 0 评论 -
4.剑指offer_用两个栈模拟一个队列
前言:这道题很简单,第一次做时,提交了一次;第二次做时,连续提交了三次。而且代码也变的很烂.不上心什么都做不好基本想法假设两个栈分别人stack1 和stack2进栈时,进栈stack1出栈时, 如果stack2栈不为空,则将stack2的栈顶元素作为返回元素如果stack2为空,但是stack1不为空,那么将stack1栈中的元素push进stack2,而后取出stack2的栈顶元素作为返原创 2017-04-29 11:28:26 · 212 阅读 · 0 评论 -
6.剑指offer-输出两个链表的公共节点
1.题目描述 输入两个链表,找出它们的第一个公共结点。链表结构如下:struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};2.基本思路设链表pHead1的长度为m,pHead2的长度为n.方法1:先遍历pH原创 2017-04-30 11:57:18 · 238 阅读 · 0 评论 -
7.剑指offer-链表中环的入口节点
1.题目 一个链表中包含环,请找出该链表的环的入口结点。2.基本思路设链表中有m个节点方法1:遍历链表,将访问过的节点存储在一个表中,边访问边查询,如果访问的节点已经在表中出现,则为环的入口节点时间复杂度O(m)O(m) ,空间复杂度O(m)O(m)方法2:首选计算环的长度,假设环的长度为n 用快慢指针,慢指针一次走一步;快指针一次走两步, 则快指针速度比慢指针快一倍。无论在环中走多原创 2017-04-30 11:58:31 · 208 阅读 · 0 评论 -
8.剑指offer-删除链表中重复节点
1.题目 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5链表结构struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x)原创 2017-04-30 14:19:23 · 233 阅读 · 0 评论 -
9.剑指offer-二叉搜索树与双向链表
1.题目描述 输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。二叉搜索树的结构如下:struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val原创 2017-05-01 12:31:35 · 148 阅读 · 0 评论 -
10.剑指offer-重建二叉树
1.问题描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并返回二叉树节点结构如下:struct TreeNode { int val; TreeNode *left; TreeNo原创 2017-05-01 12:34:36 · 198 阅读 · 0 评论 -
11.剑指offer-从左到右打印二叉树
1.题目描述 从上往下打印出二叉树的每个节点,同层节点从左至右打印。2.基本思路考察的是逐层输出二叉树的节点,本质上是二叉树的层次遍历2.1出错点两个地方出错了。vector插入元素是vec.push_back()而不是vec.push()队列中的元素是要出队的。Que.pop();3.代码 vector<int> PrintFromTopToBottom(TreeNode*原创 2017-05-02 12:21:15 · 227 阅读 · 0 评论 -
12.剑指offer-平衡二叉树的判定
1.题目描述 输入一棵二叉树,判断该二叉树是否是平衡二叉树。1.1 什么叫做平衡二叉树节点为空或者节点的左右子树的高度差小于12.基本思路判断一个节点的左右子节点是不是平衡个二叉树一个节点的左右子节点的高度差是不是小于1上面两个条件都得满足即:在判断左右子节点是不是平衡二叉树的时候还要求其高度3.代码第二次实现 bool isBalanced(TreeNode *pRoot,原创 2017-05-02 12:21:48 · 214 阅读 · 0 评论 -
13.剑指offer-二叉树的下一个节点
1.题目描述 给定一个二叉树和其中的一个结点,请找出中序遍历顺序的下一个结点并且返回。注意,树中的结点不仅包含左右子结点,同时包含指向父结点的指针。二叉树节点的定义:struct TreeLinkNode { int val; struct TreeLinkNode *left; struct TreeLinkNode *right; struct TreeLi原创 2017-05-02 15:24:57 · 664 阅读 · 0 评论 -
5.剑指offer-链表复制
1.题目要求 输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)链表形式如下:struct RandomListNode { int label; struct RandomListNode *next, *rand原创 2017-04-29 12:37:23 · 191 阅读 · 0 评论