剑指offer解答
为即将步入职场的你专门定制,剑指offer解答
Irean_Lau
Flow, Ambitious Geek, Apathy
展开
-
[剑指offer]两个链表公共节点
/* 37:>两个链表公共节点 首先 获取两个链表长度,差值为x,长的先走x步;两个同时走,第一个公共节点即是 O(m+n)*/struct ListNode{ int m_nKey; ListNode* m_pNext; ListNode(int val, ListNode* pNode) :m_nKey(val), m_pNext(原创 2016-04-07 16:03:03 · 415 阅读 · 0 评论 -
[剑指offer]数字在排序数组中出现的次数
/* 38 :>数字在排序数组中出现的次数 {1,2,3,3,3,3,4,5} 3出现4次 遍历一遍O(n) 更优解: 归并查找第一个3,位置first;最后一个3,位置last 个数 last-first+1*/int GetNumFirstPos(int* ar,int len,int start,int end,int k);int原创 2016-04-07 16:03:54 · 537 阅读 · 0 评论 -
[剑指offer]二叉树深度vs判断平衡二叉树
/* 39:> 二叉树的深度*/int Depth(BinTree* pRoot){ if (pRoot == NULL) return 0; int nLeft = Depth(pRoot->m_pLeft); int nRight = Depth(pRoot->m_pRight); return (nLeft > nRight) ? (原创 2016-04-07 16:05:12 · 468 阅读 · 0 评论 -
[剑指offer]数组中只出现一次的数(2个)(其他都出现2次)
/* 40:> 数组中只出现一次的数(2个)(其他都出现2次) 时间:O(n),空间O(1) 异或 {2,4,3,6,3,2,5,5} 第一次异或 即4^6->0010 用0010把数组分成两部分{2,3,6,2,3},{4,5,5}*/int _res(int ar[], int len){ int res = 0; for (原创 2016-04-07 16:05:58 · 485 阅读 · 0 评论 -
[剑指offer]和为s的两个数 ; 和为s的连续正整数序列
/* 41:和为s的两个数 ; 和为s的连续正整数序列 {1,2,4,7,11,15} 求和为15的两个数(头尾指针)*/bool FindTwoNumOfSum(int ar[], int len, int sum, int *num1, int *num2){ bool flag = false; if (ar == NULL || len <= 0原创 2016-04-07 16:07:05 · 418 阅读 · 0 评论 -
[剑指offer]翻转句子 ; 左旋字符串
/* 42:> 翻转句子 ; 左旋字符串 i am student -> student am i (整体翻转,局部翻转)*/void Reserve(char* pBegin, char* pEnd){ if (pBegin == NULL || pEnd == NULL || pBegin+1==pEnd) return; while (pB原创 2016-04-07 16:08:12 · 693 阅读 · 0 评论 -
[剑指offer]扑克牌的顺子
/* 44:> 扑克牌的顺子 判断一个数组的所有元素是不是顺子,0可以代表任何数 {1,5,4,0,3}能不能组成顺子 1.先排序: {0,1,3,4,5} 2.统计0的个数numofZero 3.统计空缺的个数numofGap : 1,3 空缺 :3-1-1 == 1个 4.将空缺位置用0填充,看够不够 return (numo原创 2016-04-07 16:08:54 · 408 阅读 · 0 评论 -
[剑指offer]求和1+2+3+....n
/* 46:> 求和1+2+3+....n 不能使用for while if else switch case 三目运算符*/class Sum{public: Sum() { ++N; sum += N; } static void set() { N = 0; su原创 2016-04-07 16:10:16 · 890 阅读 · 0 评论