自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zengzhen_CSDN的博客

不积跬步,无以至千里;不积小流,无以成江海。

  • 博客(11)
  • 收藏
  • 关注

原创 《剑指offer》——数组中只出现一次的数字

题目:一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。要求找出这两个 数字,且时间复杂度为O(n),空间复杂度为O(1)。 如果题目中数组中只出现一次的数字只有一个,那么可以依次将数组中的每个数字进行异或操作,那么其他出现偶数次的数字会因为自身与自身的异或而被消除,则最终的结果为那个只出现一次的数字。当只出现一次的数字为两个时,最终的结果是这两个数字异或之后的结果。因为这两个数字不相等,那

2016-01-23 19:24:49 1147

原创 《剑指offer》——二叉树的深度

int TreeDepth(TreeNode* pRoot) { if(pRoot == NULL) return 0; int dLeft = TreeDepth(pRoot -> left); int dRight = TreeDepth(pRoot -> right); return(dLeft < dRight) ? (dRight + 1)

2016-01-23 16:04:04 368

原创 《剑指offer》——数字在排序数组中出现的次数

由排序数组可以想到使用二分查找法先查找到一个待查的数字,然后再确定该数字第一次出现的位置和最后一次出现的位置,相减即可得到该数字在排序数组中出现的次数。该方法的时间复杂度为o(logn)。 /*k第一次出现的下标*/ int GetFirstK(vector<int> data, int lo, int hi, int k) { if(hi < lo)//如果k不存在该数组中,则返回-

2016-01-22 19:39:52 570

原创 《剑指offer》——两个链表的第一个公共结点

时间复杂度为O(m+n)。struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL){} };ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2) { Lis

2016-01-21 17:26:36 273

原创 《剑指offer》——数组中的逆序对

以数组{7,5,4,6}为例, 1. 将数组中的每个元素看作是一个子数组,一边将子数组排序(升序)后合并,一边统计逆序对。 2. 对合并后的子数组重复第一步。 其中,统计逆序对的方法如下,: 总结, 参考归并排序的代码可以得到如下代码:/*合并子数组,并统计逆序对的个数*/ int merge(vector<int> &data, int lo, int mi, int hi,

2016-01-20 20:16:33 376

原创 《剑指offer》——第一个只出现一次的字符

题目:在一个字符串(1<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符的位置。若为空串或不存在只出现一次的字符,返回-1。/* 时间复杂度为O(n),空间复杂度为O(1) */ int FirstNotRepeatingChar(string str) { if(str.length() == 0)//输入空串,返回-1 return -1;

2016-01-18 19:39:59 318

原创 《剑指offer》——二叉树中和为某一值的路径

题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始向下一直到叶子结点所经过的所有结点形成一条路径。 struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val

2016-01-08 12:03:50 362

原创 《剑指offer》——二叉搜索树的后序遍历序列

二叉搜索树: 它或者是一棵空树,或者是具有下列性质的二叉树。若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 总结,如果数组中判定属于二叉搜索树右子树的部分中有大于其根节点的元素,则该序列一定不是该二叉搜索树的后序遍历序列。 bool VerifySquenceOfBST(vect

2016-01-07 12:13:49 350

原创 《剑指offer》——顺时针打印矩阵

可以用一个循环来打印矩阵,每次打印矩阵中的一个圈。 /* 输入一个矩阵matrix,将其按顺时针顺序存入一维数组array中 */ vector<int> printMatrix(vector<vector<int>> matrix) { vector<int> array;//一维数组 if(matrix.empty()) return array;//

2016-01-05 11:50:18 327

原创 《剑指offer》——合并两个排序的链表

/* 非递归 */ struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL){} };ListNode* Merge(ListNode* pHead1, ListNode* pHead2) { //如果两个链表中有一个为空,则返回另一个 //如

2016-01-03 16:18:23 337

原创 《剑指offer》——反转链表

struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL){} };//定义链表结点ListNode* ReverseList(ListNode* pHead) { if(pHead == NULL)//链表为空 return NULL;

2016-01-03 12:17:14 332

空空如也

空空如也

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

TA关注的人

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