随笔分类 -  剑指offer

c++版本的《剑指offer》刷题笔记,刷题平台为牛客网。
摘要:原创博文,转载请注明出处! # 题目 # 思路 利用C++中的双端队列保存有可能是滑动窗口最大值的下标,其中队首元素保存当前窗口最大值的下标。当滑动窗口改变时,更新队列。队列更新的规则:(1)新元素依次与队尾元素比较,如果队尾元素小于新元素,则删除队尾元素,直至队列中没有小于新元素的值。(2)更新队首元素,如果队首元素不在新滑动窗口中,则删除队首元素。(3)把每次滑动的数字的下标压入... 阅读全文
posted @ 2018-05-14 15:47 wanglei5205 阅读(935) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处! # 题目 在一个长度为n+1的数组里的所有数字都在1~n的范围内,所以数组中至少有一个数字是重复的。请找出数组中任意一个重复的数字,但不能修改输入的数组。例如,如果输入长度为8的数组{2,3,5,4,3,2,6,7},那么对应的输出是重复的数字2或者3。 # 思路 借鉴二分查找的思想,将数字1~n拆分成1~m和m+1~n两部分,如果数字范围1~m... 阅读全文
posted @ 2018-05-12 22:13 wanglei5205 阅读(1581) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处! # 题目 # 思路 对于长度为n的数组,范围为0~n-1的数字而言,如果不粗在重复数字,则排序后数组元素和数组角标相同。如果存在重复数字,则在排序的过程中会出现不同下标对应相同数字的情况。 举例: 数组2310253,下标0对应的数字是2,数字2与下标0不一致,交换下标0和下标2对应的数字,交换后的结果为1320253; 数组1320253,下标0对应的... 阅读全文
posted @ 2018-05-11 15:31 wanglei5205 阅读(674) 评论(0) 推荐(0)
摘要:# 题目 把字符串转换成整数 # 思路 1.功能测试 正数/复数/0 2.边界值测试 最大的正整数/最小的负整数(数据上下溢出) 3.特殊输入测试 空字符串“”的处理,返回0,设置非法输入 字符串只有符号位的处理,返回0,设置非法输入 输入的字符串中有非数字字符,返回0,设置非法输入 # 代码 #include #include using namespa... 阅读全文
posted @ 2018-05-10 11:16 wanglei5205 阅读(3224) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处! # 题目 # 思路 本题即为典型的约瑟夫问题,通过递推公式倒推出问题的解。原始问题是从n个人中每隔m个数踢出一个人,原始问题变成从n-1个人中每隔m个数踢出一个人…… 第一行表示每个人的下标,现在要从11个人中删除报数为3的人,从图中可以可看出最后7是胜利者。分析其中的规律: 第一轮中,11个人中胜利者7的角标是6; 第二轮中,10个人中胜... 阅读全文
posted @ 2018-05-09 21:41 wanglei5205 阅读(422) 评论(0) 推荐(0)
摘要:# 题目 # 思路 顺子满足的条件: 数组长度必须为5 除0外没有重复的牌(0表示大小王) 顺子中最大值和最小值的差值小于5 # 代码 #include #include using namespace std; class Solution { public: bool IsContinuous( vector numbers ) { // 数组长度必须... 阅读全文
posted @ 2018-05-09 17:24 wanglei5205 阅读(1129) 评论(0) 推荐(0)
摘要:# 题目 # 思路 # 代码 阅读全文
posted @ 2018-05-09 16:47 wanglei5205 阅读(224) 评论(0) 推荐(0)
摘要:# 题目 不使用新变量,交换两个变量的值。 # 思路 方法一:使用加减法操作,交换两个变量的值。 A = A+B B = A-B A = A-B 方法二:使用异或运算,交换两个变量的值 A = A^B B = A^B A = A^B # 代码 #include using namespace std; void... 阅读全文
posted @ 2018-05-09 11:05 wanglei5205 阅读(390) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处! # 题目 # 思路 第一步:不考虑进位对每一位相加(异或操作) 第二步:考虑进位(位与运算+左移) 第三步:第一步和第二步相加(重复执行前两步) # 代码 #include using namespace std; class Solution { public: int Add(int num1, int num2) { int ... 阅读全文
posted @ 2018-05-09 10:36 wanglei5205 阅读(639) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处! # 题目 # 思路 使用递归计算累加,利用逻辑与的短路特性终止递归。逻辑与的短路特性 : A&&B,A>0时,执行B;A=0时,不执行B。 # 代码 阅读全文
posted @ 2018-05-05 14:11 wanglei5205 阅读(471) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处! 本题牛客网地址 本题代码的github地址 本系列文章的索引地址 # 题目 # 思路 先局部翻转,后整体翻转。举例:abcdefg先局部翻转为bagfedc,后整体翻转为cdefgab。 # 代码 #include #include using namespace std; class Solution { public: string Le... 阅读全文
posted @ 2018-05-03 10:52 wanglei5205 阅读(307) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处! 本题牛客网地址 本题代码的github地址 本系列文章的索引地址 # 题目 # 思路 两次翻转,第一次翻转整个句子,第二次翻转每个单词(单词之间用逗号隔开) # 代码 #include #include using namespace std; class Solution { public: string ReverseSentence... 阅读全文
posted @ 2018-05-03 08:58 wanglei5205 阅读(1490) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处! # 题目 # 思路 两次翻转,首先整个句子翻转,然后单词翻转。 # 代码 阅读全文
posted @ 2018-05-01 16:32 wanglei5205 阅读(397) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处! # 题目 # 思路 设置两个辅助变量small和big,small表示序列的最小值,big表示序列的最大值。如果sum(small ~ big) > s,则增大small的值。如果sum(small ~ big) #include using namespace std; class Solution { public: vector > ... 阅读全文
posted @ 2018-04-30 13:59 wanglei5205 阅读(368) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处! # 题目 # 思路 首先定义两个指针,第一个指针p指向数组的第一个数字,第二个指针q指向数组的最后一个数字。如果p+q=s,则找到要找的数字;如果p+qs,则q向前移动一个数字。 # 代码 #include #include using namespace std; /* 输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得他们的和正好是s。... 阅读全文
posted @ 2018-04-24 15:53 wanglei5205 阅读(326) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处! 本题牛客网地址 代码github地址 其他面试题索引地址 # 题目 # 思路 数组中有一个元素出现一次 如果从头到尾依次异或数组中的每一个数字,结果是只出现一次的数字,因为根据异或运算的性质,任何数字和自身做异或运算的结果是0。 举例:{4,5,5},数组中第一个元素的二 阅读全文
posted @ 2018-04-24 15:22 wanglei5205 阅读(419) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处! # 题目 # 举例 下图二叉树的深度为4,最长路径为1-2-5-7. # 思路(递归) 如果一个树只有一个节点,它的深度为1; 如果根节点只有左子树而没有右子树,那么树的深度应该是其左子树的深度+1; 如果根节点只有右子树而没有左子树,那么树的深度应该是其右子树的深度+1; 如果根节点既有左子树又有... 阅读全文
posted @ 2018-04-23 14:51 wanglei5205 阅读(2911) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处!# 题目# 思路 利用二分查找法,查找元素k在排序数组中第一次出现的位置m及最后一次出现的位置n,m-n+1即为元素k再排序数组中出现的次数。 二分查找法在数组中找到第一个k的思路:先拿数组中间元素mid和查找元素k比较,如果kmid,则第一个k只可能出现在数组的后半段;如果k=mid,则先判断中间元素是不是第一个k(如果mid前的元素不是k,则中间元... 阅读全文
posted @ 2018-04-22 17:14 wanglei5205 阅读(1326) 评论(0) 推荐(0)
摘要:原创文章,转载请注明出处! 博客文章索引地址 # 题目 #举例 如果两个单向链表有公共的节点,那么这两个链表从第一个公共结点开始,之后所有结点都是重合的,不可能再出现分叉。拓扑结构如下图所示: # 思路 第一次遍历两个链表得到两个链表的长度,以及两个链表长度的差值error;第二次遍历两个链表时,先 阅读全文
posted @ 2018-04-20 21:26 wanglei5205 阅读(626) 评论(0) 推荐(0)
摘要:原创博文,转载请注明出处!本题牛客网地址博客文章索引地址博客文章中代码的github地址1.题目2.思路3.代码 1 class Solution { 2 public: 3 int InversePairs(vector data) { 4 if(data.size() == 0){ 5 return 0; 6 } 7... 阅读全文
posted @ 2018-04-17 13:56 wanglei5205 阅读(1440) 评论(0) 推荐(0)

levels of contents