
c++
abc_xian
这个作者很懒,什么都没留下…
展开
-
c++ 多行输入,行数未知,每行长度不同
二维动态数组存储多行数据,手动输入Ctrl+Z(Ctrl + D)结束输入输入不定行整数方法#include<iostream>#include<string># include<vector>#include<sstream>using namespace std;int main(){ string str; //接收带...原创 2019-09-18 22:13:47 · 8901 阅读 · 0 评论 -
剑指offer--不用加减乘除做加法
题目描述写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。/*三步走的方式计算二进制值相加: 5-101,7-111 第一步:相加各位的值,不算进位,得到010,二进制每位相加就相当于各位做异或操作,101^111。第二步:计算进位值,得到1010,相当于各位做与操作得到101,再向左移一位得到1010,(101&111)<<1。第...原创 2019-08-22 15:22:04 · 82 阅读 · 0 评论 -
剑指offer--求1+2+3+...+n
题目描述求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。一typedef int (*func)(int);class Solution{public: static int Sum_Solution(int n) { static func f[2]...原创 2019-08-22 15:04:19 · 89 阅读 · 0 评论 -
剑指offer--圆圈中最后剩下的数
题目:0, 1, … , n-1 这 n 个数字排成一个圈圈,从数字 0 开始每次从圆圏里删除第 m 个数字。求出这个圈圈里剩下的最后一个数字。一,环形链表模拟圆圈class Solution {public: int LastRemaining_Solution(int n, int m) { if(n<=0||m<=0) ...原创 2019-08-22 14:45:00 · 149 阅读 · 0 评论 -
剑指offer--扑克牌中的顺子
题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K...原创 2019-08-22 14:23:45 · 116 阅读 · 0 评论 -
剑指offer--翻转单词顺序列
题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?一/*两次翻...原创 2019-08-22 10:52:34 · 94 阅读 · 0 评论 -
剑指offer--左旋转字符串
题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!一/*假设字符串abcdef,n=3,设X=abc,Y=def,所以字符串可以表示成X...原创 2019-08-22 10:28:54 · 88 阅读 · 0 评论 -
剑指offer--和为S的两个数字
题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。/*数列满足递增,设两个头尾两个指针i和j,若ai + aj == sum,就是答案(相差越远乘积越小)若ai + aj > sum,aj肯定不是答案之一(前面已得出 i 前面的数...原创 2019-08-22 10:19:16 · 96 阅读 · 0 评论 -
剑指offer--和为S的连续正数序列
题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数...原创 2019-08-22 10:02:29 · 92 阅读 · 0 评论 -
剑指offer--数组中只出现一次的数字
题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。/*位运算中异或的性质:两个相同数字异或=0,一个数和0异或还是它本身。当只有一个数出现一次时,我们把数组中所有的数,依次异或运算,最后剩下的就是落单的数,因为成对儿出现的都抵消了。依照这个思路,我们来看两个数(我们假设是AB)出现一次的数组。我们首先还是先异或,剩下的数字肯定是A...原创 2019-08-22 09:37:02 · 104 阅读 · 0 评论 -
剑指offer--平衡二叉树
题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。class Solution{public: bool IsBalanced_Solution(TreeNode* pRoot) { if (pRoot == NULL)return true; int left = TreeDepth(pRoot->lef...原创 2019-08-22 09:22:24 · 92 阅读 · 0 评论 -
剑指offer--树的子结构
题目描述输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) { }};*//*...原创 2019-08-16 21:46:22 · 75 阅读 · 0 评论 -
剑指offer--合并两个排序的列表
题目描述输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*//*1.从合并连个链表的头结点开始,链表头结点值小的是合并后链表的头结点,...原创 2019-08-16 20:27:44 · 125 阅读 · 0 评论 -
剑指offer--反转链表
题目描述输入一个链表,反转链表后,输出新链表的表头。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*//*1.初始化三个指针,新链表表头指针,当前节点指针,前结点指针。2.当前节点不为空进入循环,初始化下一节点指针,如果下...原创 2019-08-16 19:56:54 · 80 阅读 · 0 评论 -
剑指offer--二叉树的深度
题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NUL...原创 2019-08-21 21:42:08 · 94 阅读 · 0 评论 -
剑指offer--数字在排序数组中出现的次数
题目描述统计一个数字在排序数组中出现的次数。二分查找:递归写法/*递归写法*/class Solution { /*二分查找 找到第一个K 和 最后一个K 二者位置相减*/public: int GetNumberOfK(vector<int> data ,int k) { if(data.empty()) ...原创 2019-08-21 21:34:21 · 90 阅读 · 0 评论 -
剑指offer--两个链表的第一个公共节点
题目描述输入两个链表,找出它们的第一个公共结点。/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) {}};*//*首先遍历两个链表的长度,就能知道那个链表比较长,以及长链表比短链表长几个节点。在第二次遍历的时候,先在长链表上走若干步,接着...原创 2019-08-21 20:23:06 · 96 阅读 · 0 评论 -
C++ STL--deque
deque(双端队列)是一个动态数组,可以向两端发展,因此不论在尾部或头部安插元素都十分迅速。 在中间部分安插元素则比较费时,因为必须移动其它元素。使用deque之前需包含头文件:#include <deque>deque的逻辑结构:deque的内部结构deque是一种优化了的对序列两端元素进行添加和删除操作的基本序列容器。通常由一些独立的区块组成,第一区块朝某方向...原创 2019-08-28 16:25:09 · 161 阅读 · 0 评论 -
C++ STL--list
List由双向链表(doubly linked list)实现而成,元素也存放在堆中,每个元素都是放在一块内存中,他的内存空间可以是不连续的,通过指针来进行数据的访问,这个特点使得它的随机存取变得非常没有效率,因此它没有提供[]操作符的重载。但是由于链表的特点,它可以很有效率的支持任意地方的插入和删除操作。list有一个重要的性质:插入操作和删除操作都不会造成原有list迭代器的失效,每次插入...原创 2019-08-28 21:25:06 · 217 阅读 · 0 评论 -
字符串表达式
编写一个功能类,实现字符串表达式求值表达式求值是程序设计语言中很重要的问题,它的实现是栈应用的典型例子,即“算符优先算法”。算术四则运算法则是(1)先乘除后加减;(2)从左算到右;(3)先括号内,后括号外。任何一个表达式都是由操作数、运算符和界定符组成的。本例中为了简便起见,操作数采用浮点常数,运算符限于+、-、*、/,界定符限于左右括号。代码# include <iost...原创 2019-09-05 14:41:44 · 3286 阅读 · 0 评论 -
回溯问题
迷宫问题题目:给一个二维列表,表示迷宫(0表示通道,1表示围墙)。给出算法,求一条走出迷宫的路径。 解决思路:在一个迷宫节点(x,y)上,可以进行四个方向的探查:maze[x-1][y], maze[x+1][y], maze[x][y-1]...原创 2019-09-04 21:26:10 · 592 阅读 · 0 评论 -
矩阵问题
编写一个关于矩阵加法、乘法的类。代码# include <iostream># include <string># include <sstream># include <vector># include <functional># include <algorithm># include<iter...原创 2019-09-04 16:37:13 · 384 阅读 · 0 评论 -
大整型数加法、乘法类
编一个关于大整型无符号数加法、乘法的类。大整型数一般是4个字节,但一般会遇到超大数的运算,那么系统提供的int、long就不够用了。因此,必须自定义大整型类,代码如下所示。(1)如何建立及描述大整型数。一个方案是通过字符串输入建立,通过解析字符串,把每位存入STL提供的容器中。由于会遇到进位问题,即对容器头进行进位插入操作,从这一点看deque<int>双端队列更好。(2)...原创 2019-09-04 11:14:22 · 473 阅读 · 0 评论 -
C++ STL ---bind1st、bind2nd、transform、back_inserter
bind1st()函数与bind2nd()函数首先,他们都在头文件中定义。其次,bind就是绑定的意思,而1st就代表first,2nd就代表second,现在名在可以很快记住了。再次,他们的申明是一样的,都是(const Operation& op, const T& x)。简单的说,bind1st(const Operation& op, const...原创 2019-09-04 10:45:42 · 414 阅读 · 0 评论 -
C++ STL --map()与multimap()
Map和multimap将key/value pair(键值/实值 队组)当作元素,进行管理。他们根据key的排序准则将元素排序。multimap允许重复元素,map不允许。元素要求:key/value必须具有assigned(可赋值)和copyable(可复制的)性质。 对于排序而言,key必须具是comparable(可比较的)。 ...原创 2019-09-04 09:46:49 · 186 阅读 · 0 评论 -
C++ STL --set()与multiset()
需要包含头文件:# include <set>set和multiset会根据特定的排序准则,自动将元素进行排序。不同的是后者允许元素重复而前者不允许。自动排序的主要优点在于使二叉树搜寻元素具有良好的性能,在其搜索函数算法具有对数复杂度。但是自动排序也造成了一个限制,不能直接改变元素值,因为这样会打乱原有的顺序,要改变元素的值,必须先删除旧元素,再插入新元素。所以sets和mul...原创 2019-09-03 17:25:02 · 313 阅读 · 0 评论 -
【转】vector二维数组的内存分析及作为参数的传递方式
vector二维数组的内存分析创建一个2x4的二维数组。想到的办法是:先创建一个容器的容器,外层大小的2(2行),然后里面容器小大为4(4列)。int row=2,col=4; vector<vector<int> > v(row);//v为容器的容器,大小为2. for(int i=0; i<row; i++) v[i].resize(col);/...转载 2019-08-30 19:19:46 · 4930 阅读 · 1 评论 -
vector的二维数组作为类的私有成员变量的初始化和值的更改
关于vector<vector<int>>的使用vector<vector<int>> A;//错误的定义方式vector<vector<int> > A; //正确的定义方式,有空格vector<m,vector<int>(n,k));m:行数,n:列数,k:初值代码# inc...原创 2019-08-30 18:08:25 · 2674 阅读 · 1 评论 -
[转载]--动态规划-- 最长公共子序列图解 过程
原文链接:https://blog.youkuaiyun.com/hrn1216/article/details/515346071.基本概念首先需要科普一下,最长公共子序列(longest common sequence)和最长公共子串(longest common substring)不是一回事儿。什么是子序列呢?即一个给定的序列的子序列,就是将给定序列中零个或多个元素去掉之后得到的结...转载 2019-08-30 19:21:08 · 730 阅读 · 0 评论 -
频度问题
关于lower_bound( )和upper_bound( )的常见用法在从小到大的排序数组中,lower_bound( begin,end,num):从数组的begin位置到end-1位置二分查找第一个大于或等于num的数字,找到返回该数字的地址,不存在则返回end。通过返回的地址减去起始地址begin,得到找到数字在数组中的下标。upper_bound( begin,end,num...原创 2019-08-30 09:23:35 · 725 阅读 · 0 评论 -
C++STL中全排列函数next_permutation的使用
next_permutation函数常用到排列,这里介绍一个计算序列全排列的函数:next_permutation(start,end),和prev_permutation(start,end)。这两个函数作用是一样的,区别就在于前者求的是当前排列的下一个排列,后一个求的是当前排列的上一个排列。至于这里的“前一个”和“后一个”,我们可以把它理解为序列的字典序的前后,严格来讲,就是对于当前序列p...原创 2019-08-29 21:11:57 · 373 阅读 · 0 评论 -
C++ STL --queue
只能访问 queue<T> 容器适配器的第一个和最后一个元素。只能在容器的末尾添加新元素,只能从头部移除元素。许多程序都使用了 queue 容器。queue 容器可以用来表示超市的结账队列或服务器上等待执行的数据库事务队列。对于任何需要用 FIFO 准则处理的序列来说,使用 queue 容器适配器都是好的选择。图 1 展示了一个 queue 容器及其一些基本操作: ...原创 2019-08-28 22:23:14 · 374 阅读 · 0 评论 -
C++ STL--stack
stack准确的说并不是STL framework所提供的容器,而是一个为了满足特殊需求而设计的容器。属于容器适配器(container adapter),它提供了简单而清晰的接口满足我们对数据结构堆栈的需求。对于stack(也称LIFO,后进先出),我们可以使用 push()将任意数量的元素放入stack内,也可以使用 pop()将元素以其插入的反序从容器中移除。上图可以很形象的看出...原创 2019-08-28 22:04:34 · 153 阅读 · 0 评论 -
C++ STL-- list --erase()
STL中的容器按存储方式分为两类,一类是按以数组形式存储的容器(如:vector 、deque);另一类是以不连续的节点形式存储的容器(如:list、set、map)。在使用erase方法来删除元素时,需要注意一些问题。在使用 list、set 或 map遍历删除某些元素时可以这样使用:正确使用方法1:std::list< int> List;...转载 2019-08-28 21:31:55 · 1089 阅读 · 0 评论 -
剑指offer--链表中环的入口
题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。方法一/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};*//*1.判断环的存在:定义两个指针,慢指针指向...原创 2019-08-16 16:37:24 · 119 阅读 · 0 评论 -
剑指offer--第一个只出现一次的字符
题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).class Solution {public: int FirstNotRepeatingChar(string str) { if(str.size()==0) ...原创 2019-08-21 16:38:49 · 87 阅读 · 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得到,那么...原创 2019-08-21 16:22:05 · 95 阅读 · 0 评论 -
剑指offer--按之字形打印二叉树
题目描述请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : ...原创 2019-08-19 18:58:24 · 109 阅读 · 0 评论 -
剑指offer--从上到下打印二叉树
题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL) {}};*//*按层遍历二叉树*/class S...原创 2019-08-19 16:36:51 · 84 阅读 · 0 评论 -
剑指offer--旋转数组的最小数字
题目描述把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素。例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1。NOTE:给出的所有元素都大于0,若数组大小为0,请返回0。/*1.前面的子数组的元素都大于等于后面子数组的元素时,最小元素是这两个子数组的的分界线。使用二分查找法,...原创 2019-08-14 15:31:08 · 97 阅读 · 0 评论