
C++
文章平均质量分 53
Ego_Bai
这个作者很懒,什么都没留下…
展开
-
STL容器之删除元素,迭代器失效
一. 种类:标准STL序列容器:vector、string、deque和list。标准STL关联容器:set、multiset、map和multimap。非标准序列容器slist和rope。slist是一个单向链表,rope...原创 2018-09-12 11:42:03 · 741 阅读 · 0 评论 -
算法题-求带环链表中环的入口结点
[编程|20分] 链表中环的入口结点 时间限制:C/C++ 1秒,其他语言 2秒空间限制:C/C++ 32768K,其他语言 65536K题目描述 一个链表中包含环,请找出该链表的环的入口结点。思路: 已知链表带环,那么我们便不需要判断链表带环与否,而主要关注找到环入口的方法:设置两个指针(pFaster, pSlower),初始值都指向头,pSlower每次前进一步,p...原创 2018-06-07 21:12:02 · 679 阅读 · 0 评论 -
算法题-两个链表的第一个公共结点
[编程题]两个链表的第一个公共结点 时间限制:1秒 空间限制:32768K 输入两个链表,找出它们的第一个公共结点。 给两个指针,”分别”从头到尾遍历”两个链表“,只要没遇到公共结点就继续遍历,最终两个指针到达 null 或者到达公共结点,返回之.C++/*struct ListNode { int val; struct ListNode *next...原创 2018-06-07 16:24:37 · 692 阅读 · 0 评论 -
算法题-数组中重复的数字
[编程题]数组中重复的数字 时间限制:1秒 空间限制:32768K 题目描述 在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 解题思路找到任意重复的一个值并赋值...原创 2018-06-07 16:05:23 · 901 阅读 · 0 评论 -
算法题-顺时针打印矩阵
2.顺时针打印矩阵顺时针打印矩阵[编程题]顺时针打印矩阵 时间限制:1秒空间限制:32768K输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10.总结下来整体思路分为两大类:...原创 2018-05-31 12:55:43 · 635 阅读 · 0 评论 -
算法题-调整数组顺序使奇数位于偶数前面
1.[编程题]调整数组顺序使奇数位于偶数前面 时间限制:1秒 空间限制:32768K输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路及解法:一.C++解法1.创建新数组(1) 先把原数组中的奇数push进去再把偶数push进去,然后用新数组数据覆盖...原创 2018-05-31 12:10:29 · 2411 阅读 · 0 评论 -
算法题-二维数组(杨氏矩阵)中查找一个整数是否存在
题目描述在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序。请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数。二维数组实际上就是杨氏矩阵思路 这是一个非常常见的问题,总结下来一共三种方式:mlogn(m为行n为列)1.(暴力求解)两层循环嵌套开始逐个逐行遍历,时间复杂度O(m*n) 2.进化版.把每一行...原创 2018-05-30 11:52:35 · 18051 阅读 · 0 评论 -
算法题-实现一个函数用来匹配'.'和'*'的正则表达式
1.请实现一个函数用来匹配包括’.’和’‘的正则表达式。模式中的字符’.’表示任意一个字符,而’‘表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配 思路:递归实现串中子串迭代每次分别在string 和patt中取一个字符进行匹配,如果匹配,则...原创 2018-05-30 10:15:19 · 2138 阅读 · 0 评论 -
算法题-字符串空格替换
描述 请编写一个方法,将字符串中的空格全部替换为“%20”。假定该字符串有足够的空间存放新增的字符,并且知道字符串的真实长度(小于等于1000),同时保证字符串由大小写的英文字母组成。 给定一个string iniString 为原始的串,以及串的长度 int len, 返回替换后的string。 测试样例: “Mr John Smith”,13 返回:”Mr%20John%20Smit...原创 2018-05-24 19:44:43 · 345 阅读 · 0 评论 -
算法题-删除链表中重复的结点
[编程|20分] 删除链表中重复的结点 时间限制:C/C++ 1秒,其他语言 2秒 空间限制:C/C++ 32768K,其他语言 65536K题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5原创 2018-06-07 21:38:02 · 1517 阅读 · 0 评论 -
算法题-把数组排成最小的数
把数组排成最小的数 时间限制:1秒空间限制:32768K 算法知识视频讲解 输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。思路一首先我们很容易想到全排列,但全排列时间复杂度为O(n!)。 所以在这里我们需要根据题意发现其中数学规律,然后定义一个规则...原创 2018-06-02 12:33:25 · 775 阅读 · 0 评论 -
GET和POST两种基本请求方法的区别
GET和POST是HTTP请求的两种基本方法GET - 从指定的服务器中获取数据POST - 提交数据给指定的服务器处理最直观的区别就是GET把参数包含在URL中,POST通过request body传递参数。(此部分参考自w3schools) - GET在浏览器回退时是无害的,而POST会再次提交请求。 - GET产生的URL地址可以被Bookmark,而POST不可以。 ...原创 2018-08-02 16:10:19 · 625 阅读 · 0 评论 -
算法题-rotate-list 旋转旋转
[编程题]rotate-list 时间限制:1秒 空间限制:32768K Given a list, rotate the list to the right by k places, where k is non-negative. For example: Given1->2->3->4->5->NULLand k =2, return4-...原创 2018-06-10 20:21:16 · 825 阅读 · 0 评论 -
Leetcode-convert-sorted-list-to-binary-search-tree(把有序链表转为二叉搜索树)
[编程题]convert-sorted-list-to-binary-search-tree 时间限制:1秒 空间限制:32768KGiven a singly linked list where elements are sorted in ascending order, convert it to a height balanced BST. 思路:二分查找法每次需要找到中间...原创 2018-06-10 20:15:10 · 949 阅读 · 0 评论 -
算法题-二叉搜索树与双向链表
[编程题]二叉搜索树与双向链表 时间限制:1秒空间限制:32768K输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。思路: 非递归版本: 二叉树的中序遍历 中序遍历中每个结点的链接# -*- coding:utf-8 -*-# class TreeNode:# def __init__(self, x...原创 2018-06-09 18:59:03 · 657 阅读 · 0 评论 -
算法题-按照左右半区的方式重新组合单链表
[编程题]按照左右半区的方式重新组合单链表 时间限制:1秒 空间限制:32768K 给定一个单链表的头部节点head,链表长度为N。 如果N为偶数,那么前N/2个节点算作左半区,后N/2个节点算作右半区; 如果N为奇数,那么前N/2个节点算作左半区,后N/2+1个节点算作右半区; 左半区从左到右依次记为L1->L2->…,右半区从左到右依次记为R1->R2->...原创 2018-06-09 18:58:13 · 776 阅读 · 0 评论 -
算法题-构建乘积数组
编程题]构建乘积数组 时间限制:1秒 空间限制:32768K 给定一个数组A[0,1,…,n-1],请构建一个数组B[0,1,…,n-1],其中B中的元素B[i]=A[0]A[1]…A[i-1]*A[i+1]…*A[n-1]。不能使用除法。 1.剑指offer上的思路: B[i]的值可以看作下图的矩阵中每行的乘积。 下三角用连乘可以很容求得,上三角,从下向上也是连...原创 2018-06-09 17:18:13 · 742 阅读 · 0 评论 -
算法题-倒置字符串(逐词)
[编程题]倒置字符串 时间限制:1秒空间限制:32768K将一句话的单词进行倒置,标点不倒置。 比如 I like beijing. 经过函数后变为:beijing. like I 输入描述: 每个测试输入包含1个测试用例: I like beijing. 输入用例长度不超过100输出描述: 依次输出倒置之后的字符串,以空格分割\示例1输入 I like be...原创 2018-05-28 14:00:26 · 1508 阅读 · 1 评论 -
算法题-和为S的连续正数序列
[编程题]和为S的连续正数序列 时间限制:1秒 空间限制:32768K 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列...原创 2018-06-02 12:36:27 · 357 阅读 · 0 评论 -
算法题-字符串转换整数
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0 输入描述: 输入一个字符串,包括数字字母符号,可以为空输出描述: 如果是合法的数值表达则返回该数字,否则返回0示例1输入 +2147483647 1a33输出 2147483647 0class Solution{pu...原创 2018-05-24 19:49:08 · 389 阅读 · 0 评论 -
算法题-字符串旋转
对于一个字符串,和字符串中的某一位置,请设计一个算法,将包括i位置在内的左侧部分移动到右边,将右侧部分移动到左边。给定字符串A和它的长度n以及特定位置p,请返回旋转后的结果。测试样例: “ABCDEFGH”,8,4 返回:”FGHABCDE”正常解法1.用 “[ ]”按特定位置访问逐字符拷贝class StringRotation {public: string ...原创 2018-05-24 20:08:41 · 895 阅读 · 0 评论 -
算法题-合并两个排序的链表
[编程题]合并两个排序的链表时间限制:1秒 空间限制:32768K输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。主要思路1、本题很显然用递归方式很好实现,同时需要注意下算法的鲁棒性即——首先处理空链表,当其中一个为空链表时,直接输出另一个;当两个均为空链表时,输出null 2、比较 list1 和 list2 的头结点,较小的头结...原创 2018-06-04 17:24:36 · 703 阅读 · 0 评论 -
模板实现顺序表+双向链表
用模板写链表主要还是为了实现代码的类型通用性,用模板写函数或类都与是类型无关的,因此,STL中都是用模板来实现容器,下面我们来介绍用模板实现顺序表和带头结点的双向循环链表。 以下代码将实现顺序表和链表的增、删、查、改、判空等常用接口以做练习。顺序表#pragma oncetemplate<class T>class SeqList{public: SeqList()原创 2018-03-20 23:07:08 · 375 阅读 · 0 评论 -
面试中的C++常见问题
1.在C++ 程序中调用被C 编译器编译后的函数,为什么要加extern “C”?答:首先,extern是C/C++语言中表明函数和全局变量作用范围的关键字,该关键字告诉编译器,其声明的函数和变量可以在本模块或其它模块中使用。 通常,在模块的头文件中对本模块提供给其它模块引用的函数和全局变量以关键字extern声明。extern “C”是连接申明(linkage declaration),...原创 2018-03-18 18:57:11 · 490 阅读 · 0 评论 -
string类的写时拷贝与引用计数
由于浅拷贝使多个对象共用一块内存地址,调用析构函数时导致一块内存被多次释放,导致程序奔溃。实现string类的时候通常显示的定义拷贝构造函数和运算符重载函数。由于释放内存空间,开辟内存空间时花费时间,因此,在我们不需要写,只是读的时候就可以不用新开辟内存空间,就用浅拷贝的方式创建对象,当我们需要写的时候才去新开辟内存空间。这种方法就是写时拷贝。在构造函数中开辟新的空间时多开辟4个字节的空间,用来存放原创 2017-10-17 16:38:24 · 491 阅读 · 0 评论 -
C++ string类增删查改
c++ 提供的string类包含了若干实用的成员函数,大大方便了字符串的增加、删除、更改、查询等操作。插入字符串insert()函数可以在string字符串中置顶的位置插入另一个字符串,它的原型为:string& insert (size_t pos, const string& str);看这个插入的格式我们就能猜想到,pos表示要插入的下标;str表示要插入的字符串,它可以是string变量,也原创 2017-10-17 16:29:22 · 707 阅读 · 0 评论 -
C++实现静态顺序表的增删查改
顺序表:用一段地址连续的存储单元依s次存储数据元素的线性结构,是线性表的一种。SeqList.h//SeqList.h #pragma once #include <assert.h> #include <string.h> #define MAX_SIZE 5 typedef int DataType; //定义顺序表结构体 typedef struct SeqList {原创 2017-10-17 16:33:30 · 758 阅读 · 0 评论 -
C++ 引用与指针
一.引用(reference)引用其实是对象的另一个名字(别名)。引用主要用作函数的形式参数。 进一步理解:引用是一种复合类型(引用又是一种类型),通过在变量名前添加”&“符号来定义。复合类型指的是用其他类型来定义的类型。结论:其实引用只是一个别名,即只是他绑定的对象的另一个名字,作用在引用上的所有操作事实上都是作用在该引用绑定的对象上1.一个变量可以取多个“别名” 2.引用定义时时一定要初始化原创 2017-09-22 18:52:01 · 375 阅读 · 0 评论 -
C++基础,名字空间、C++函数重载的实现原理
C++类和对象我们知道C语言是面向过程的编程语言,而C++是一门面向对象(OPP)的编程语言。 面向对象是一种程序设计范型,也是一种程序开发的方法。而对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装在里面,以提高软件的重要性、灵活性和扩展性。 C++的发展历史 C几乎是C++的一个子集,所以C语言支持的语法在C++基本都支持原创 2017-07-28 08:43:42 · 610 阅读 · 0 评论 -
C++类和对象
C++类和对象我们知道C语言是面向过程的编程语言,而C++是面向对象(OPP)的编程语言。 面向对象是一种程序设计范型,也是一种程序开发的方法。而对象指的是类的实例,将对象作为程序的基本单元,将程序和数据封装在里面,以提高软件的重要性、灵活性和扩展性。 面向对象程序设计 :概念:(Object Oriented Programming,缩写:原创 2017-07-28 10:11:27 · 458 阅读 · 0 评论 -
为什么C++编译器不能支持对模板的分离式编译
首先,一个编译单元(translation unit)是指一个.cpp文件以及它所#include的所有.h文件,.h文件里的代码将会被扩展到包含它的.cpp文件里,然后编译器编译该.cpp文件为一个.obj文件(假定我们的平台是win32),后者拥有PE(Portable Executable,即windows可执行文件)文件格式,并且本身包含的就已经是二进制码,但是不一定能够执行,因为并不保证其原创 2018-03-20 23:20:07 · 362 阅读 · 0 评论 -
算法题-反转单链表
[编程题]反转链表时间限制:1秒 空间限制:32768K输入一个链表,反转链表后,输出链表的所有元素。解法一.循环反转链表(非递归法) 整体思路就是,从原链表的头部一个一个取节点并插入到新链表的头部p始终指向要反转的结点newHead 指向反转后的首结点每反转一个结点,把p结点的next指向newHead, newHead再移动到P的位置成为反转后首结点, 再把p通过tmp...原创 2018-06-04 17:02:08 · 983 阅读 · 0 评论 -
算法题-数组中的逆序对
[编程题]数组中的逆序对 时间限制:1秒空间限制:65536K在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 输入描述: 题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size&amp;amp;lt;=10^4对于%7...原创 2018-05-28 14:20:50 · 868 阅读 · 0 评论 -
算法题-求数组中 连续子数组最大和
[编程题]连续最大和 . 热度指数:38075 时间限制:1秒 空间限制:32768K 算法知识视频讲解 一个数组有 N 个元素,求连续子数组的最大和。 例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3 输入描述: 输入为两行。 第一行一个整数n(1 &lt;= n &lt;= 100000),表示一共有n个元素 第二行为n个数,即每个元素,每个整数都...原创 2018-06-03 20:49:25 · 2635 阅读 · 0 评论 -
算法题-求链表中倒数第k个节点
时间限制:1秒 空间限制:32768K 本题知识点: 链表 题目描述输入一个链表,输出该链表中倒数第k个结点。思路1: 遍历两次数组,第一次先统计出来个数n,第二次再求出n-k+1,将求倒数第k节点的问题转化为正数第n-k+1的问题C++/*struct ListNode { int val; struct ListNode *next; ...原创 2018-06-03 20:34:34 · 465 阅读 · 0 评论 -
算法题-找出字符串中第一个只出现一次的字符
找出字符串中第一个只出现一次的字符输入描述:输入一个非空字符串输出描述:输出第一个只出现一次的字符,如果不存在输出-1示例1输入 asdfasdfo输出 o思路,一般这种题指定用hashmap解决,把整个数组丢进一个hashtable中,以空间换时间,以追求最高效时间复杂度O(N),当然还有暴力两层遍历的O(N²),有时候 做之前就会...原创 2018-05-26 13:56:13 · 15901 阅读 · 3 评论 -
STL容器-vector的使用&C++简单实现
上次我们聊到了顺序容器与关联容器的概念,也简要总结了STL中主要容器的分类,同时也对list具体的使用与实现进行了描述,这次我们关注vectorvector字面意思很好理解,向量!这样我们可以直接得知它属于一种顺序容器,那么意味着他在内存上的分布是连续的,那么我们顺理成章的可以想到其内部是用数组来实现,在末尾增加或者删除元素所需时间与元素数目无关,在中间或者开头增加或者删除元素所需时间是随元素...原创 2018-05-12 18:10:14 · 654 阅读 · 0 评论 -
STL容器-list的使用&简单C++实现
1.容器是STL的重要组成部分之一,分为关联容器和顺序容器c++中两种类型的容器:顺序容器和关联容器, 顺序容器主要有:vector、list、deque等。 其中 1.vector表示一段连续的内存地址,基于数组的实现 2.list表示非连续的内存,基于链表实现。 3.deque与vector类似,但是对于首元素提供删除和插入的双向支持。关...原创 2018-05-05 15:51:27 · 1009 阅读 · 0 评论 -
招行数据岗笔试题- 信用卡推荐客户列表
空间限制:32768K现在信用卡开展营销活动,持有我行信用卡客户推荐新户办卡,开卡成功后可获得积分奖励。规定每个客户最多可推荐两个新户且一个新户只能被推荐一次。但允许链接效应,即若客户A推荐了新户B,新户B推荐新户C,则客户C同时属于A和B的推荐列表。简单起见,只考虑以一个老客户A作起点推荐的情况。编程计算推荐新户数不小于n的客户列表。 输入描述: 输入的第一行为以空格分隔的两个正...原创 2018-04-05 16:32:58 · 2559 阅读 · 0 评论 -
C++动态内存管理
C语言动态内存管理malloc:不初始化的申请动态内存空间(一个参数) calloc:有初始化的申请动态内存空间(两个参数) realloc:调整已经申请好的动态空间的大小 free:释放已申请的动态空间 以上都是在堆上开辟空间void Test() { int*p1=(int*)malloc(sizeof(int)*4); free(p1原创 2017-07-19 18:31:34 · 438 阅读 · 0 评论