随笔分类 - 剑指Offer
摘要:题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、x、/ 四则运算符号。题目分析剑指Offer(纪念版)P237代码实现int Add(int num1, int num2){ int sum, carry; do { sum = num1 ^ num...
阅读全文
摘要:题目描述0,1,…,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。题目分析剑指Offer(纪念版)P229约瑟夫(Josephuse)环问题我们使用模板库中的双向链表std:list来模拟一个环形链表。PS:向量vector 线性顺...
阅读全文
摘要:题目描述从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大小王可以看成任意数字。题目分析剑指Offer(纪念版)P227代码实现bool IsContinuous(int* numbers, int length){ ...
阅读全文
摘要:题目描述字符串的左旋转操作是把字符串前面的若干个字符转移到字符串的尾部。请定义一个函数实现字符串左旋转操作的功能。比如输入字符串"abcdefg"和数字2,该函数将返回左旋转2位得到的结果"cdefgab"。题目分析剑指Offer(纪念版)P220代码实现void Reverse(char *pBe...
阅读全文
摘要:题目描述输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串"I am a student.",则输出"student. a am I"。题目分析剑指Offer(纪念版)P218两次翻转字符串代码实现void Reverse(char...
阅读全文
摘要:题目描述输入一个正数s,打印出所有和为s的连续正数序列(至少含有两个数)。例如输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以结果打印出3个连续序列1~5、4~6和7~8。题目分析剑指Offer(纪念版)P216代码实现void FindContinuousSequence(int ...
阅读全文
摘要:题目描述输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和等于s,输出任意一对即可。题目分析剑指Offer(纪念版)P214快速排序的思想代码实现bool FindNumbersWithSum(int data[], int length, int su...
阅读全文
摘要:题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。要求时间复杂度是O(n),空间复杂度是O(1)。题目分析剑指Offer(纪念版)P211① 自己与自己异或为0② 0与数A异或为A③ 异或满足交换律代码实现void FindNumsAppearOnc...
阅读全文
摘要:题目描述输入一棵二叉树的根结点,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。题目分析剑指Offer(纪念版)P207代码实现// 1// / \// 2 3// ...
阅读全文
摘要:题目描述统计一个数字在排序数组中出现的次数。例如输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4。题目分析剑指Offer(纪念版)P204代码实现int GetNumberOfK(int* data, int length, int k){ in...
阅读全文
摘要:题目描述输入两个链表,找出它们的第一个公共结点。链表结点定义如下:题目分析剑指Offer(纪念版)P193 思路三代码实现ListNode* FindFirstCommonNode( ListNode *pHead1, ListNode *pHead2){ // 得到两个链表的长度 un...
阅读全文
摘要:题目描述在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。题目分析剑指Offer(纪念版)P189代码实现int InversePairs(int* data, int length){ if(data == NULL |...
阅读全文
摘要:题目描述在字符串中找到第一个只出现一次的字符。如输入“abaccdeff”,则输出'b'。题目分析剑指Offer(纪念版)P186代码实现char FirstNotRepeatingChar(char* pString){ if(pString == NULL) return '...
阅读全文
摘要:题目描述我们把只包含因子2、3和5的数称作丑数(Ugly Number)。求按从小到大的顺序的第1500个丑数。例如6、8都是丑数,但14不是,因为它包含因子7.习惯上我们把1当做第一个丑数。题目分析剑指Offer(纪念版)P182代码实现int GetUglyNumber_Solution2(in...
阅读全文
摘要:题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323.题目分析剑指Offer(纪念版)P177代码实现// int型整数用十进制表示最多只有10位const int g_M...
阅读全文
摘要:题目描述输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11和12, 1一共出现了5次。题目分析剑指Offer(纪念版)P174代码实现int NumberOf1Between1AndN_Solution2(int n){ ...
阅读全文
摘要:题目描述输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(n)。例如输入的数组为{1,-2,3,10,-4,7,2,-5},和最大的子数组为{3,10,-4,7,2},因此输出为该子数组的和18.题目分析剑指Offer(纪...
阅读全文
摘要:题目描述输入n个整数,找出其中最小的k个数。例如输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。题目分析剑指Offer(纪念版)P167代码实现O(n)的算法,只有当我们可以修改输入的数组时可用void GetLeastNumbers_Solution1(int* i...
阅读全文
摘要:题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。题目分析剑指Offer(纪念版)P163代码实现int MoreThanHalfNum_Solutio...
阅读全文
摘要:题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。题目分析剑指Offer(纪念版)P154代码实现回溯法--排序树void Permutation(char* pStr...
阅读全文