![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
c++编程
闪闪亮亮
人生就是这样,耐得住寂寞,才能守得住繁华。每一个优秀的人,都有一段沉默的时光。那一段时光,付出了很多努力,忍受孤独和寂寞,不抱怨不诉苦,日后说起时,连自己都能被感动。
展开
-
最长无重复字符的子串
给定一个字符串,请找出其中无重复字符的最长子字符串。样例例如,在”abcabcbb”中,其无重复字符的最长子字符串是”abc”,其长度为 3。 对于,”bbbbb”,其无重复字符的最长子字符串为”b”,长度为1。方法一:class Solution {public: /* * @param s: a string * @return: an in...原创 2018-03-03 21:26:12 · 192 阅读 · 0 评论 -
比较排序算法的时间复杂度的下限
原因: 对于n个待排序元素,在未比较时,可能的正确结果有n!种。 在经过一次比较后,其中两个元素的顺序被确定,所以可能的正确结果剩余n!/2种(确定之前两个元素的前后位置的情况是相同,确定之后相当于少了一半的可能性)。 依次类推,直到经过m次比较,剩余可能性n!/(2^m)种。 直到n!/(2^m)<=1时,结果只剩余一种。根据斯特灵公式,此时的比较次数m为o(nlogn)次。 所以基于排原创 2017-10-26 21:48:48 · 5541 阅读 · 0 评论 -
排序算法
排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。 排序算法的稳定性 排序算法稳定性的简单形式化定义为:如果Ai = Aj,排序前Ai在Aj之前,排序后Ai还在Aj之前,则称这种排序算法是稳定的。通俗地讲就是保证排序前后两个相等的数的相对顺序不变。对于不稳定的排序算法,只要举出一个实例,即可说明它的不原创 2017-10-24 21:39:09 · 256 阅读 · 0 评论 -
海量数据面试题整理
海量数据面试题整理 1. 给定a、b两个文件,各存放50亿个url,每个url各占64字节,内存限制是4G,让你找出a、b文件共同的url? 方案1:可以估计每个文件安的大小为50G×64=320G,远远大于内存限制的4G。所以不可能将其完全加载到内存中处理。考虑采取分而治之的方法。 s 遍历文件a,对每个url求取,然后根据所取得的值将url分别存储到1000个小文件(记为)中。这样每个小文转载 2017-11-09 20:16:35 · 241 阅读 · 0 评论 -
栈的压入、弹出序列
输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)class Solution {public: bool IsPopOrder(vector<原创 2017-10-30 20:30:22 · 187 阅读 · 0 评论 -
翻转链表
翻转一个链表样例给出一个链表1->2->3->null,这个翻转后的链表为3->2->1->null原地翻转,需要借助三个临时指针,进行原地翻转,简单的理解就是讲指向进行反向。具体代码如下:/** * Definition of ListNode * * class ListNode { * public: * int v原创 2017-08-14 11:55:12 · 172 阅读 · 0 评论 -
插入排序的变形
题目描述 输入一个整数数组,实现一个函数来调整该数组中数字的顺序,使得所有的奇数位于数组的前半部分,所有的偶数位于位于数组的后半部分,并保证奇数和奇数,偶数和偶数之间的相对位置不变。思路:如果这里不考虑空间的复杂度,可以用O(n),但是为了节约空间,我们采用插入排序的方法处理这个问题。代码如下:class Solution {public: //简单用插入排序的方法处理 //交换原创 2017-10-28 11:50:27 · 221 阅读 · 0 评论 -
最长回文子串
0. 问题定义最长回文子串问题:给定一个字符串,求它的最长回文子串长度。如果一个字符串正着读和反着读是一样的,那它就是回文串。下面是一些回文串的实例: 12321 a aba abba aaaa tattarrattat(牛津英语词典中最长的回文单词)1. Brute-force 解法对于最长回文子串问题,最简单粗暴的办法是:找到字符串的所有子串,遍历每一个子串以验证它们是否为回文串。一个子串转载 2017-09-03 11:41:14 · 309 阅读 · 0 评论 -
最小子串覆盖
问题描述Given a string S and a string T, find the minimum window in S which will contain all the characters in T in complexity O(n). For example, S = “ADOBECODEBANC” T = “ABC” Minimum window is “BANC”.原创 2017-09-11 22:15:56 · 345 阅读 · 0 评论 -
最长无重复字符的子串
最长无重复字符的子串给定一个字符串,请找出其中无重复字符的最长子字符串。 样例 例如,在”abcabcbb”中,其无重复字符的最长子字符串是”abc”,其长度为 3。 对于,”bbbbb”,其无重复字符的最长子字符串为”b”,长度为1。 要求时间复杂度为O(n)思路:如果找到所有的子串的话,在依次进行对比的话,时间复杂度不符合要求。从题目中可以看出,要求时间复杂度为O(n),那么遍历一次,同原创 2017-09-02 21:16:10 · 441 阅读 · 0 评论 -
蓄水池抽样算法 & 随机洗牌算法
蓄水池抽样算法和随机洗牌算法详解与证明。原创 2017-09-02 11:41:20 · 1027 阅读 · 0 评论 -
落单的数(落单的数 & 落单的数 II & 落单的数 III)
落单的数给出2*n + 1 个的数字,除其中一个数字之外其他每个数字均出现两次,找到这个数字。样例给出 [1,2,2,1,3,4,3],返回 4挑战 一次遍历,常数级的额外空间复杂度思路1:利用异或的性质(自反性)自反性:a ^ b ^ a = b.异或运算最常见于多项式除法,不过它最重要的性质还是自反性:A^B^ B=A,即对给定的数A,用同样的运算因原创 2017-09-01 10:36:30 · 2758 阅读 · 1 评论 -
虚基类、虚函数、纯虚函数的用法及其区别
c程序的内存布局是: 1. 代码段 code or text 2. 只读数据段 ro data 3. 已初始化读写数据段 rw data 4. 未初始化读写数据段 bss 5. 堆 heap 6. 栈 stack 有时候也这么说: 1. 栈 2. 堆 3. 全局区或静态区 ...转载 2017-11-14 15:48:37 · 2081 阅读 · 2 评论 -
C和C++如何动态申请内存和释放内存?有什么区别?
c使用malloc和free,c++则是new和delete。申请释放都差不多,那么它们之间到底是否有差别呢? C 语言的malloc() 和free() 并不会调用析构函数和构造函数。C++的 new 和 delete 操作符 是 “类意识” ,并且当调用new的时候会调用类的构造函数和当delete 调用的时候会调用析构函数。 注意:混合用malloc 和delete或者混合用new 和f转载 2017-11-14 16:09:43 · 1972 阅读 · 0 评论 -
只能在类的构造函数的初始化列表
1、 const数据成员的初始化只能在类的构造函数的初始化列表中进行。要想建立在整个类中都恒定的常量,应该用类中的枚举常量来实现,或者static cosnt。 2、引用类型,引用必须在定义的时候初始化,并且不能重新赋值,所以也要写在初始化列表中; 3、没有默认构造函数的类类型,因为使用初始化列表可以不必调用默认构造函数来初始化,而是直接调用拷贝构造函数;...原创 2018-03-09 22:38:55 · 884 阅读 · 0 评论 -
C++如何实现类对象只能动态分配或只能静态分配
C++中建立类的对象有两种方式: (1)静态建立,例如 A a; 静态建立一个类对象,就是由编译器为对象在栈空间中分配内存。使用这种方法,是直接调用类的构造函数。 (2)动态建立,例如 A* p = new A(); 动态建立一个类对象,就是使用new运算符为对象在堆空间中分配内存。这个过程分为两步:第一步执行operator new( )函数,在堆空间中搜索一块内存并...转载 2018-03-09 22:05:43 · 2631 阅读 · 3 评论 -
堆和栈
一、预备知识—程序的内存分配 一个由C/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其 操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回 收 。注意它与数据结构中的堆是两回事,分配方式倒是类...转载 2018-02-28 19:39:30 · 153 阅读 · 0 评论 -
strcpy函数实现
转载: https://www.cnblogs.com/chenyg32/p/3739564.html已知strcpy函数的原型是: char *strcpy(char *dst, const char *src); 实现strcpy函数 解释为什么要返回char * 假如考虑dst和src内存重叠的情况,strcpy该怎么实现1.strcpy的实现代码char * str...转载 2018-03-07 10:53:24 · 412 阅读 · 0 评论 -
extern "C"的作用
extern “C”的主要作用就是为了能够正确实现C++代码调用其他C语言代码。加上extern “C”后,会指示编译器这部分代码按C语言的进行编译,而不是C++的。由于C++支持函数重载,因此编译器编译函数的过程中会将函数的参数类型也加到编译后的代码中,而不仅仅是函数名;而C语言并不支持函数重载,因此编译C语言代码的函数时不会带上函数的参数类型,一般之包括函数名。 C++语言支持函数重载,C语言...转载 2018-03-07 10:41:32 · 269 阅读 · 0 评论 -
内存对齐原则
内存对齐原则:一、结构体变量的首地址能够被其最宽基本类型成员大小与对齐基数中的较小者所整除; 二、结构体每个成员相对于结构体首地址的偏移量(offset)都是该成员大小与对齐基数中的较小者的整数倍,如有需要编译器会在成员之间加上填充字节(internal adding); 三、结构体的总大小为结构体最宽基本类型成员大小与对齐基数中的较小者的整数倍,如有需要编译器会在最末一个成员之后加上填充...转载 2018-03-07 10:19:42 · 442 阅读 · 0 评论 -
内联函数和宏定义
宏定义的缺点1、容易出错,预处理器在拷贝宏代码时,常常会产生意想不到的边际效用,容易产生二义性。(在调用处进行展开,会出现运算符优先级的问题) 2、不可以调试。然而内联函数在debug版本里面,它根本不是真正的内敛,在release中才会成为真正的内敛。 3、在c++中,宏代码无法操作类的私有数据成员。原因是,预处理器不能进行类型安全检查和自动类型转换,预处理无法处理this指针的问题。...原创 2018-03-07 10:10:12 · 182 阅读 · 2 评论 -
Const的作用
Const 作用1、修饰函数的输入参数 2、修饰函数的返回值(一般出现在链式表达上) 3、const+成员函数 4、修饰变量const常量与define宏定义的区别(1) 编译器处理方式不同 define宏是在预处理阶段展开。 const常量是编译运行阶段使用。 (2)类型和安全检查不同 define宏没有类型,不做任何类型检查,仅仅是展开。 const常量有具体的类型,在编译阶段会原创 2017-11-26 21:01:28 · 225 阅读 · 0 评论 -
优先队列
删除优先级高的元素和插入元素,这种数据结构称为优先队列。优先队列的实现方法主要有三种:优先队列的各种实现在最坏的情况下运行时间的增长数量级 数据结构 插入元素 删除最大元素 有序数组 N 1 无序数组 1 N 堆 logN logNpriority_queue调用 STL里面的 make_heap(), pop_heap(), push_heap()原创 2017-11-06 16:02:24 · 212 阅读 · 0 评论 -
C++的多态性
多态性多态性的定义:只允许不同类的对象对同一消息作出相应反应,即同一消息可以根据发送对象的不同而采用的行为方式。这里的发送消息就是函数调用。 多态性分为:编译期多态(静态多态)和运行时多态(动态动态)。编译时多态编译期多态,正如其名,就是在编译期确定的一种多态性。这个在C++中主要体现在函数模板,这里需要注意的是函数重载和多态无关。// 例1:函数模板体现出编译期多态 #include <io转载 2017-11-20 16:43:59 · 420 阅读 · 0 评论 -
Windows下快速安装xgboost
Windows下快速安装xgboost开始安装网上的教程各种配置环境很复杂,其实完全可以不要那样操作。直接pip安装就好。就是需要先下载相应符合要求的xgboost的包即可。 如Windows10 Python3.6 64位系统,就下载xgboost-0.6-cp36-cp36m-win_amd64.whl。。然后 cmd下输入:pip install xgboost-0.6-cp36-cp3原创 2017-11-14 17:40:41 · 426 阅读 · 0 评论 -
RALL和智能指针
RAII机制RAII的本质内容是用对象代表资源,把管理资源的任务转化为管理对象的任务,将资源的获取和释放与对象的构造和析构对应起来,从而确保在对象的生存期内资源始终有效,对象销毁时资源一定会被释放。说白了,就是拥有了对象,就拥有了资源,对象在,资源则在。所以,RAII机制是进行资源管理的有力武器,C++程序员依靠RAII写出的代码不仅简洁优雅,而且做到了异常安全。特点在栈语义和操作符重载的支持下,C原创 2017-09-10 21:39:35 · 1093 阅读 · 0 评论 -
染色问题
思路:只要遍历一次,分别统计左侧的g的数量和右侧r的数量,就可以得到染色的次数。 代码如下:#include<string>#include<iostream>#include<vector>#include<algorithm>using namespace std;int gettimes(string str){ int rsum = 0; int gsum = 0原创 2017-09-10 20:06:23 · 610 阅读 · 0 评论 -
两数之和 & 三数之和
给一个整数数组,找到两个数使得他们的和等于一个给定的数 target。你需要实现的函数twoSum需要返回这两个数的下标, 并且第一个下标小于第二个下标。注意这里下标的范围是 1 到 n,不是以 0 开头。 注意事项你可以假设只有一组答案。样例给出 numbers = [2, 7, 11, 15], target = 9, 返回 [1原创 2017-08-31 16:41:49 · 650 阅读 · 0 评论 -
删除链表中倒数第n个节点
题目给定一个链表,删除链表中倒数第n个节点,返回链表的头节点。 注意事项 链表中的节点个数大于等于n 样例 给出链表1->2->3->4->5->null和 n = 2.删除倒数第二个节点之后,这个链表将变成1->2->3->5->null.思路:类似于寻找倒数第n个节点。这里倒退的时候保存倒数n+1的节点,那么方便后面的删除的操作。代码如下原创 2017-08-12 16:05:24 · 195 阅读 · 0 评论 -
删除排序链表中的重复元素
问题描述:定一个排序链表,删除所有重复的元素每个元素只留下一个。样例给出 1->1->2->null,返回 1->2->null给出 1->1->2->3->3->null,返回 1->2->3->null思路:设置两个指针,一个当前指针,一个前继指针。依次遍历这个链表,删除重复的元素。代码如下:/** * Definiti原创 2017-08-12 11:59:30 · 247 阅读 · 0 评论 -
链表划分
题目描述:给定一个单链表和数值x,划分链表使得所有小于x的节点排在大于等于x的节点之前。你应该保留两部分内链表节点原有的相对顺序。样例:给定链表 1->4->3->2->5->2->null,并且 x=3,返回 1->2->2->4->3->5->null思路:分别申请两个指针left和right,小于x的添加到 left中,大于等于x的添加到right中;最后,将 r原创 2017-08-12 11:18:59 · 280 阅读 · 0 评论 -
链表倒数第n个节点
找到单链表倒数第n个节点,保证链表中节点的最少数量为n。样例给出链表 3->2->1->5->null和n = 2,返回倒数第二个节点的值1.思路:这个比较简单,只要保证两者之间的长度为n,再同时后退,就可以知道倒数那个元素是多少。代码如下:/** * Definition of ListNode * class ListNode { * public:原创 2017-08-11 22:53:12 · 414 阅读 · 0 评论 -
合并两个排序链表
问题描述:将两个排序链表合并为一个新的排序链表样例给出 1->3->8->11->15->null,2->null, 返回 1->2->3->8->11->15->null。方法一(非递归方法):/** * Definition of ListNode * class ListNode { * public: * int val;原创 2017-08-11 22:17:09 · 145 阅读 · 0 评论 -
132 Pattern
问题描述:Given a sequence of n integers a1, a2, ..., an, a 132 pattern is a subsequence ai, aj, ak such that i j k and ai ak aj. Design an algorithm that takes a list of n numbers as input and checks原创 2017-08-04 11:08:48 · 316 阅读 · 0 评论 -
删除链表中的元素
删除链表中等于给定值val的所有节点。样例给出链表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回删除3之后的链表:1->2->4->5。思路:处理链表问题,一般需要设置两个指针,一个指向当前节点,一个指向后继节点。然后进行删除等操作。代码如下:/** * Definition for singly-link原创 2017-08-11 11:45:45 · 270 阅读 · 0 评论 -
有效的括号序列判断
给定一个字符串所表示的括号序列,包含以下字符: '(', ')', '{', '}', '[' 和 ']', 判定是否是有效的括号序列。样例括号必须依照 "()" 顺序表示, "()[]{}" 是有效的括号,但 "([)]"则是无效的括号。挑战O(n)的时间,n为括号的个数其中栈的基本操作有:1、入栈 push()2、出栈 pop()3、原创 2017-08-02 13:07:18 · 443 阅读 · 0 评论 -
用栈模拟汉诺塔问题
在经典的汉诺塔问题中,有 3 个塔和 N 个可用来堆砌成塔的不同大小的盘子。要求盘子必须按照从小到大的顺序从上往下堆 (如,任意一个盘子,其必须堆在比它大的盘子上面)。同时,你必须满足以下限制条件:(1) 每次只能移动一个盘子。(2) 每个盘子从堆的顶部被移动后,只能置放于下一个堆中。(3) 每个盘子只能放在比它大的盘子上面。请写一段程序,实现将第一个堆的盘子移动到最后一个原创 2017-08-03 11:55:08 · 565 阅读 · 0 评论 -
简化路径
给定一个文档(Unix-style)的完全路径,请进行路径简化。样例"/home/", => "/home""/a/./b/../../c/", => "/c"挑战你是否考虑了 路径 = "/../" 的情况?在这种情况下,你需返回"/"。此外,路径中也可能包含双斜杠'/',如 "/home//foo/"。在这种情况下,可忽略原创 2017-08-10 11:22:01 · 1493 阅读 · 0 评论 -
带最小值操作的栈
问题描述:实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和 min 操作,所有操作要求都在O(1)时间内完成。如果堆栈中没有数字则不能进行min方法的调用。思路方法:1、定义一个栈这里我们称为最小栈,原来的栈我们称为数据栈。2、最小栈和数据栈元素个数一定相同。最小栈的栈顶元素为数据栈的所有原创 2017-08-09 11:29:09 · 274 阅读 · 0 评论 -
Expression Expand
问题描述:Given an expression s includes numbers, letters and brackets. Number represents the number of repetitions inside the brackets(can be a string or another expression).Please expand expression to原创 2017-08-05 20:37:39 · 300 阅读 · 0 评论