C++
文章平均质量分 82
zy20150613
这个作者很懒,什么都没留下…
展开
-
剑指offer:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。
题目:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)分析:借助一个栈,根据给定的入栈序、出栈序模拟它的过程,看看能不能对的上。具体规则是借助...原创 2019-05-10 16:31:51 · 1246 阅读 · 0 评论 -
剑指offer:第一个只出现一次的字符
题目:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).分析:方法(1):用一个数组count,记录每个字母出现的次数,最后遍历字符串,看看其对应的次数是不是1,满足找第一次出现1次的字母。int FirstNotRepeatingChar(string str) {...原创 2019-05-21 08:17:08 · 122 阅读 · 0 评论 -
剑指offer:数组中的逆序对
题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,size<=...原创 2019-05-21 08:24:00 · 131 阅读 · 0 评论 -
剑指offer:两个链表的第一个公共结点
题目:输入两个链表,找出它们的第一个公共结点。分析:先计算两个链表长度,让长的那个先走差距步,然后一起走,相遇时就是答案。ListNode* FindFirstCommonNode( ListNode* pHead1, ListNode* pHead2) { if(pHead1==nullptr || pHead2==nullptr) return...原创 2019-05-21 08:24:50 · 134 阅读 · 0 评论 -
数字在排序数组中出现的次数
题目:统计一个数字在排序数组中出现的次数。分析:方法(1):从头开始遍历统计等于k的元素的个数方法(2):利用stl库中的函数equal_range,它返回一对迭代器(以pair的形式),这对迭代器之间的元素都是k,左闭右开方法(3):二分查找(找到从前往后第一个k下标,从后往前第一个下标即可)int GetNumberOfK(vector<int> data...原创 2019-05-21 08:33:50 · 139 阅读 · 0 评论 -
剑指offer:二叉树的深度
题目:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。分析:递归,一棵二叉树的高度等于1+max{左子树高度,右子树高度} int TreeDepth(TreeNode* pRoot) { if(pRoot==nullptr) return 0; ...原创 2019-05-21 08:34:30 · 124 阅读 · 0 评论 -
剑指offer:求1+2+3+...+n
题目:求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。分析:利用构造函数、静态变量求解。class Sum { private: static int n; static int sum; public: static void R...原创 2019-05-21 08:35:08 · 129 阅读 · 0 评论 -
剑指offer:数组中只出现一次的数字
题目:一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。分析:方法(1):先遍历一遍数组,计算出所有元素亦或结果sum,按照sum是1的比特位将原数组分成2组,那两个单独的数组必然被分到两组,因为是他俩不同的比特位才造成sum的1的,然后亦或其中一组找到其中一个数组n1,然后用sum亦或这个n1得到n2。void FindNumsAppear...原创 2019-05-21 08:36:37 · 104 阅读 · 0 评论 -
剑指offer:和为S的连续正数序列
题目:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出:所有和为S的连续正数序列。序列内按照从小...原创 2019-05-21 08:37:43 · 114 阅读 · 0 评论 -
剑指offer:丑数
题目:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。分析:首先从丑数的定义我们知道,一个丑数的因子只有2,3,5,那么丑数p = 2 ^ x * 3 ^ y * 5 ^ z,换句话说一个丑数一定由另一个丑数乘以2或者乘以3或者乘以5得到,那么我们从1开始乘...原创 2019-05-21 08:16:15 · 108 阅读 · 0 评论 -
组队竞赛
题目:链接:https://www.nowcoder.com/questionTerminal/6736cc3ffd1444a4a0057dee89be789b?orderByHotValue=1&page=1&onlyReference=false来源:牛客网牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组...原创 2019-05-21 08:04:04 · 170 阅读 · 0 评论 -
剑指offer:二叉树的镜像
题目:操作给定的二叉树,将其变换为源二叉树的镜像。二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ /...原创 2019-05-11 22:00:26 · 93 阅读 · 0 评论 -
剑指offer:从上往下打印出二叉树的每个节点,同层节点从左至右打印。
题目:从上往下打印出二叉树的每个节点,同层节点从左至右打印。分析:借助一个队列,先将根结点的指针入队列,出来时访问它,然后将它的左右孩子带到队列中(这也是队列中放的是结点的指针原因,因为要通过它找到左右孩子),然后只要队不空,就访问队头结点,带左右孩子。。。直到队为空,说明所有元素访问完了。vector<int> PrintFromTopToBottom(TreeNode...原创 2019-05-10 16:32:39 · 159 阅读 · 0 评论 -
剑指offer:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。
题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。分析:后续遍历的最后一个数据是根结点数据,那么这个数字必将序列分成左右两部分,它大于左边所有的数据,小于右边所有的数据,其中找到这个分界点后,如果右半部分存在一个小于这个根数据的,就说明不是后续遍历,然后用同样的方式递归判断它的左子树、右子树。...原创 2019-05-10 16:33:25 · 771 阅读 · 1 评论 -
剑指offer:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。
题目:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)分析:分为三步走:(1)给原来的链表的每个结点复制一个新节点并且插入到对应的后面 (2)利用老节点将新节点的random指针域置好 (3)将链表还原,即拆成完整的两个链表...原创 2019-05-10 16:34:13 · 302 阅读 · 0 评论 -
剑指offer:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。分析:如果有符合条件的数字,则它出现的次数比其他所有数字出现的次数和还要多。在遍历数组时保存两个值:一是数组中一个数字,一是次数。遍历下一个数字时,若它与之前保存的数字相同,则次数...原创 2019-05-10 16:34:57 · 641 阅读 · 0 评论 -
剑指offer:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。
题目:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。分析:方法(1):排序(升序),找前k个数据vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { //在n个数中找最小的前k个数(排序) ...原创 2019-05-10 16:36:29 · 558 阅读 · 0 评论 -
剑指offer:连续子数组的最大和
题目:连续子数组的最大和。HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它...原创 2019-05-10 16:37:13 · 79 阅读 · 0 评论 -
剑指offer:整数中1出现的次数(从1到n整数中1出现的次数)
题目:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。分析:先求出一个整除中有多少个1(模10除10的方式),然后循环看某个非负整...原创 2019-05-10 16:37:51 · 85 阅读 · 0 评论 -
剑指offer:把数组排成最小的数
题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。分析:对vector容器内的数据进行按照 将a和b转为string后 若 a+b<b+a a排在在前 的规则排序,如 2 21 因为 212 < 221 所以 排序后为 21 2 ,排序后数组中的元素...原创 2019-05-10 16:38:30 · 106 阅读 · 0 评论 -
剑指offer:树的子结构
题目:输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)分析:先看B是不是以A的根结点为根结点的子树,是的话直接返回true,否则看是不是以A的左子树为根结点的子树,再看右子树这是一个递归的过程。//判断node2是不是以node1的根结点为根结点的子树 bool is_subtree(TreeNode* node1, TreeNode* ...原创 2019-05-10 16:39:17 · 73 阅读 · 0 评论 -
C/C++中struct和class的区别
C语言中只有struct,是指结构体,是由结构体名,结构体成员构成。C++中的struct对C中的struct进行了扩充,它已经不再只是一个包含不同数据类型的数据结构了,它已经获取了太多的功能。struct能包含成员函数吗?能!struct能继承吗?能!!struct能实现多态吗?能!!!最本质的一个区别就是默认的...原创 2019-05-12 20:42:30 · 2264 阅读 · 0 评论 -
C++中构造函数详解
一、 构造函数是干什么的class Counter{public: // 类Counter的构造函数 // 特点:以类名作为函数名,无返回类型 Counter() { m_value = 0; }private: // 数据成员 ...原创 2019-05-12 20:47:28 · 173 阅读 · 0 评论 -
井子棋
题目:class Board {public: bool checkWon(vector<vector<int> > board) { // write code here int rows = board.size(); int cols = board[0].size(); ...原创 2019-05-31 16:08:26 · 369 阅读 · 0 评论 -
n*m的棋盘
题目:分析:递归法每次向右、向下走(行规模减1此时列规模不变,加上列规模减1此时行规模不变),递归出口是行列规模都是0就返回0,只要有一个是0,就说只剩一条路了返回1即可。#include <iostream>using namespace std; int process(int n, int m){ if (m == 0 && n ==...原创 2019-05-31 16:09:04 · 1202 阅读 · 0 评论 -
另类加法
题目:分析:亦或表示不算进位之和,与右移一位表示进位值class UnusualAdd {public: int addAB(int A, int B) { // write code here //位运算符 while(B!=0) { int sum=A^B;//不...原创 2019-05-31 16:09:50 · 131 阅读 · 0 评论 -
二维数组打印
题目:有一个二维数组(n*n),写程序实现从右上角到左下角沿主对角线方向打印。给定一个二位数组arr及题目中的参数n,请返回结果数组。测试样例:[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]],4返回:[4,3,8,2,7,12,1,6,11,16,5,10,15,9,14,13]分析:沿着主对角线方向,每次元素下标都要各加1,直到超出边...原创 2019-05-31 16:10:19 · 351 阅读 · 0 评论 -
是否为合法的入栈序
题目:已知两个字母序列,一个是入栈序,一个是出栈序,把入栈序列按出现顺序压入一个栈,在入栈的任意过程中,允许栈中的字母出现,所有字母都是由大小写组成,并且不重复出现。现在需要判断已知的出栈序是不是合法的。分析:借助一个栈,根据入栈序和出栈序模拟给定过程,拿着入栈序看此时要不要出栈,如果全过程模拟完毕顺利(入栈序走完,并且栈为空)说明合法,否则说明不合法。//检查入队出队序列#inc...原创 2019-05-31 16:13:49 · 236 阅读 · 0 评论 -
24进制转换为10进制
题目:有一个字符串形式表示的24进制数字M,需要转换成10进制数字N,M为无符号数字,可用32位整数存储,以字母0123456789abcdefghijklmn分别表示数字0-23分析:将24进制数的每一位按照乘以其对应的权值,最后将其加起来int reverse(string& s){ string table("0123456789abcdefghijklmn"); ...原创 2019-05-31 16:14:18 · 1606 阅读 · 0 评论 -
求最小公倍数
输出: 35分析:最小公倍数=两个数的乘积/最小公倍数#include <iostream>using namespace std; int main(){ int A; int B; cin>>A>>B; int muli=A*B;//保存A和B的乘积 //先求最大公约数 whil...转载 2019-05-31 16:16:26 · 133 阅读 · 0 评论 -
剑指offer:二叉搜索树与双向链表
题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向分析:中序遍历并将遍历顺序的结点存起来,最后遍历添加每个指针的前后指针域即可。vector<TreeNode*> nodes; //中序遍历(将结点指针尾插在vector中) void tranverse(TreeNode* pRoot) {...原创 2019-06-04 16:50:13 · 115 阅读 · 0 评论 -
剑指offer:二叉树中和为某一值的路径
题目:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)//全局变量 vector<vector<int>> res;//保存最终结果 vector<int> path;//保存每一次的路径...原创 2019-06-04 16:50:57 · 118 阅读 · 0 评论 -
密码强度等级
题目:#include <iostream>#include <string> using namespace std; int GetLen(string& s){ int len = s.size(); if (len <= 4) return 5; else if (len >= 5 && len &...原创 2019-05-31 16:07:18 · 228 阅读 · 0 评论 -
最近公共祖先
题目:分析:哪个大哪个先向上走,走到相遇为止int getLCA(int a, int b) { // write code here while(a!=b) { if(a>b)//a先向上走 { a=a/2; } ...原创 2019-05-31 16:06:18 · 133 阅读 · 0 评论 -
求最大连续bit数
题目:分析:挨着统计,遇到更长的替换Maxint main(){ int n; while(cin>>n) { int max=0; for(int i=0;i<8;i++) { int count=0; while(((n>>i)&...原创 2019-05-31 16:05:23 · 149 阅读 · 0 评论 -
C++中类成员函数中的this指针
先要理解class的意思。class应该理解为一种类型,象int,char一样,是用户自定义的类型。用这个类型可以来声明一个变量,比如int x, myclass my等等。这样就像变量x具有int类型一样,变量my具有myclass类型。理解了这个,就好解释this了,my里的this 就是指向my的指针。如果还有一个变量myclass mz,mz的this就是指向mz的指针。 这样就很容易理解...原创 2019-05-12 20:50:39 · 8156 阅读 · 0 评论 -
[编程题]字符串中找出连续最长的数字串
链接:https://www.nowcoder.com/questionTerminal/bd891093881d4ddf9e56e7cc8416562d?orderByHotValue=0&page=1&onlyReference=false来源:牛客网读入一个字符串str,输出字符串str中的连续最长的数字串输入描述:个测试输入包含1个测试用例,一个字符串str...原创 2019-05-22 11:29:44 · 770 阅读 · 0 评论 -
[编程题]计算糖果
链接:https://www.nowcoder.com/questionTerminal/02d8d42b197646a5bbd0a98785bb3a34来源:牛客网A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息:A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.现在需...原创 2019-05-23 12:20:50 · 267 阅读 · 0 评论 -
[编程题]进制转换
链接:https://www.nowcoder.com/questionTerminal/ac61207721a34b74b06597fe6eb67c52来源:牛客网[编程题]进制转换热度指数:20634 时间限制:1秒 空间限制:32768K给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数输入描述:输入为一行,M(32位整数)、N(2 ≤ N ≤ 16...原创 2019-05-23 12:25:20 · 1817 阅读 · 0 评论 -
leetcode:最长回文子串
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: "babad"输出: "bab"注意: "aba" 也是一个有效答案。示例 2:输入: "cbbd"输出: "bb"解法1:暴力法菜鸡的我第一想法只能想到暴力法,遍历各种可能结果class Solution {public: string longe...原创 2019-06-05 10:02:10 · 160 阅读 · 0 评论