自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

冰殇的博客

「Talk is cheap. Show me the code」

  • 博客(194)
  • 资源 (1)
  • 问答 (1)
  • 收藏
  • 关注

原创 C/C++知识点回顾与总结

  本博客总结C/C++的常见知识点,如有问题欢迎提出,转载请注明出处http://blog.csdn.net/qq_34342154/article/details/78876099一、C和C++的区别C++在C的基础上增加类C面向过程,C++面向对象C主要考虑通过一个过程将输入量经过各种运算后得到一个输出, C++ 主要考虑是如何构造一个对象模型,让这个模型契合与之对应的问题域,...

2017-12-22 19:03:45 699

原创 《程序员代码面试指南》Python实现(个人读书笔记)

说明  最近一直在读左神的书——《程序员代码面试指南—IT名企算法与数据结构题目最优解》,为了记录自己的学习成果,并且方便以后查看,将自己读书时的想法与使用python实现的代码记录在此博客。   >>>github代码地址>>>栈和队列设计一个有getMin功能的栈由两个栈组成队列如何仅用递归函数和栈操作逆序一个栈用一个栈实现另一个栈的排序生成窗口最大值数组构造数组的MaxTree

2017-09-09 21:57:34 13149 5

原创 Python 定时框架 APScheduler技术原理

文章目录1.APscheduler是什么2.APScdeduler的基本概念2.1 Job 作业2.2 Trigger 触发器2.3 Executor 执行器2.4 Jobstore 作业存储器2.5 Scheduler 调度器2.6 Scheduler 事件监听机制3.APScheduler的工作流程4.APScheduler的使用实例1.APscheduler是什么Python定时任务框架APScheduler,Advanced Python Scheduler (APScheduler) 是一个轻

2020-06-24 10:43:52 2210 1

原创 Linux学习笔记

1、通配符   *   匹配零个或多个字符   ?   匹配任意一个字符   [0-9]   匹配一个数字范围   [abc]   匹配列表里的任何字符   [^abc]   匹配列表以外字符2、ctrl + r 命令搜索3、su -  切换为root用户,启用一个全新的终端   su  仅切换用户身份不切换终端4、id  显示当前用户信息5、passwd  修...

2018-06-14 13:49:54 685

原创 shell学习笔记

1、history 查看命令历史  !! 重复上一个命令   !55 运行命令历史中第55条命令   !if 运行最近一次以if开头的命令   !$ 上一个命令最后一个参数2、alias 设置别名   unalias 取消别名3、ls *.txt 匹配以.txt结尾的所有   ls [12].txt 括号中任选其一   ls ?.txt 只匹配一个字符...

2018-06-14 13:29:19 723

转载 linux基础命令练习题

1、如何通过命令行重启linux操作系统?shutdown -r now |reboot |init 6 2、如何在命令行中快速删除光标前的内容?ctrl + uctrl + k (删除光标之后的内容)3、设置/test/a.txt属主有读写执行权限,属组,有读写,其他账户无权限chmod 760 /test/a.txt4、如何删除/tmp下所有A开头的文件...

2018-06-14 11:34:26 23286 2

转载 C/C++从源代码到可执行程序的过程详解

编译,编译程序读取源程序(字符流),对之进行词法和语法的分析,将高级语言指令转换为功能等效的汇编代码,再由汇编程序转换为机器语言,并且按照操作系统对可执行文件格式的要求链接生成可执行程序。源代码-->预处理-->编译-->优化-->汇编-->链接–>可执行文件Source–(编译)–> Ass

2018-06-05 16:28:09 3945

原创 集合的所有子集

方法一:对于任意一个元素,都可以使用一个bit位表示该元素的存在与否,例如: 集合{a, b, c},可以使用{1, 1, 1}表示{a, b, c},{1, 0 , 1}表示{a,c}。故可以使用一个整型变量来映射整个集合,从000…000 ~ 111…111,分别表示不同的情况,一共有2N2N2^N种情况。我们只需要从000…000开始,每次加1,就可以获得相应的子集,打印即可。...

2018-03-10 16:22:08 2762

原创 C++类型转换操作符 dynamic_cast

dynamic_cast 顾名思义是支持动态的类型转换,即支持运行时识别指针或引用所指向的对象。dynamic_cast<>用于C++类继承多态间的转换,分为:子类向基类的向上转型(Up Cast) 基类向子类的向下转型(Down Cast) 其中向上转型不需要借助任何特殊的方法,只需用将子类的指针或引用赋给基类的指针或引用即可,dynamic_cast向上转型其总是...

2018-03-03 17:15:56 1291

原创 C++浮点数的存储方式

类型float大小为4字节,即32位,内存中的存储方式如下:最高位 31 位 ,保存符号位 S,“0”表示正数 ,“1”表示负数第30 位~23 位 ,共 8 位 ,保存指数部分(指数值加上偏移量127) ,称为阶码第22 位~0 位 ,共 23 位 ,保存系数部分 (整数位的1不保存),称为尾数类型double大小为8字节,即64位,内存布局如下: 最高位 6...

2018-02-24 18:18:24 1271

转载 C++多重继承下的指针类型转换

在C++中,指针的类型转换是经常发生的事情,比如将派生类指针转换为基类指针,将基类指针转换为派生类指针。指针的本质其实就是一个整数,用以记录进程虚拟内存空间中的地址编号,而指针的类型决定了编译器对其指向的内存空间的解释方式。基于上面的理解,我们似乎可以得出一个结论,C++中对指针进行类型转换,不会改变指针的值,只会改变指针的类型(即改变编译器对该指针指向内存的解释方式),但是这个结论在C++多...

2018-02-22 16:13:38 485

原创 C++虚函数继承与虚继承

虚函数继承和虚继承是完全不同的两个概念。虚函数继承是解决多态性的,当用基类指针指向派生类对象的时候,基类指针调用虚函数的时候会自动调用派生类的虚函数,这就是多态性,也叫动态编联。虚继承就是为了节约内存,他是多重继承中的特有的概念。适用于菱形继承形式。比如B继承于A、C继承于A、D继承于B和C,显然D会继承两次A(图1)。因此,为了节省空间,可以将B、C对A的继承定义为虚拟继承,而A就成...

2018-02-22 15:56:40 14646 5

原创 汇编语言学习笔记

1、debug 调试工具参数:-r    显示所有寄存器状态,可以修改寄存器内容(形如-r ax)-d    显示从当前cs:ip位置之后的128个字节,可以指定地址打印(形如: -d 段地址:偏移地址)-u    将cs:ip位置后续的字节翻译成汇编指令,可以制定地址翻译(形如: -u 段地址:偏移地址)-a    在当前cs:ip位置处写指令,可以制定地址(形如: ...

2018-02-08 23:37:54 596

转载 什么是字节对齐,为什么需要字节对齐

概念  在C语言中,结构是一种复合数据类型,其构成元素既可以是基本数据类型(如int、long、float等)的变量,也可以是一些复合数据类型(如数组、结构、联合等)的数据单元。在结构中,编译器为结构的每个成员按其自然边界(alignment)分配空间。各个成员按照它们被声明的顺序在内存中顺序存储,第一个成员的地址和整个结构的地址相同。  为了使CPU能够对变量进行快速的访问,变量的起始地

2018-02-02 18:30:06 13994

原创 C/C++常用预处理指令总结(#ifdef,#ifndef,#endif,#pragma once ...)

本文主要记录了C/C++常见预处理指令。包括#include、#define、#ifdef,#ifndef,#endif,#pragma once 什么是预处理指令?  预处理指令是以#号开头的代码行。#号必须是该行除了任何空白字符外的第一个字符。#后是指令关键字,在关键字和#号之间允许存在任意个数的空白字符。整行语句构成了一条预处理指令,该指令将在编译器进行编译之前对源代码做某些转换。  预处理指

2017-12-24 22:44:14 755

原创 剑指Offer---表示数值的字符串

【题目】  请实现一个函数用来判断字符串是否表示数值(包括整数和小数)。例如,字符串 “+100”, “5e2”, “-123”, “3.1416”和 “-1E-16”都表示数值。 但是 “12e”, “1a3.14”, “1.2.3”, “+-5”和 “12e+4.3”都不是。【基本思路】  字符串应满足通式A[.[B]][e|EC],或者.B[e|EC]。其中,A、C表示有(或无)符号位的数字,

2017-12-24 12:12:42 321

原创 剑指Offer---正则表达式匹配

【题目】  请实现一个函数用来匹配包括’.’和’*’的正则表达式。模式中的字符’.’表示任意一个字符,而’*’表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串”aaa”与模式”a.a”和”ab*ac*a”匹配,但是与”aa.a”和”ab*a”均不匹配【代码实现】class Solution {public: bool match(c

2017-12-24 10:33:47 249

转载 C++虚函数表剖析

一、概述  为了实现C++的多态,C++使用了一种动态绑定的技术。这个技术的核心是虚函数表(下文简称虚表)。本文介绍虚函数表是如何实现动态绑定的。二、类的虚表  每个包含了虚函数的类都包含一个虚表。   我们知道,当一个类(A)继承另一个类(B)时,类A会继承类B的函数的调用权。所以如果一个基类包含了虚函数,那么其继承类也可调用这些虚函数,换句话说,一个类继承了包含虚函数的基类,那么这个类也拥有

2017-12-22 19:24:53 222

原创 剑指Offer---和为S的两个数字

【题目】  输入一个递增排序的数组和一个数字S,在数组中查找两个数,是的他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。【基本思路】  使用两个指针small和big,small表示第一个数字的位置,big表示第二个数字的位置。初始时,small = 0,big = 数组最后一个位置。如果arr[small] + arr[big] < S,small++;如果arr[small]

2017-12-13 22:00:43 223

原创 剑指Offer---和为s的连续正数序列

【题目】  输入一个正数s,打印出所有和为s的连续正数序列(至少包含两个数)。例如,输入15,由于1+2+3+4+5=4+5+6=7+8=15,所以打印出3个连续序列1~5,4~6,7~8。【基本思路】  使用两个指针small和big,small表示连续序列的首元素,big表示连续序列的尾元素,初始时small = 1,big = 2。此时序列的累加和total = 3。如果累加和小于s,则扩大序

2017-12-13 20:31:53 209

原创 剑指Offer---寻找第N个丑数

【题目】  把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。【基本思路】  方法一:      如果一个数是丑数,那么这个数,如果能被2整除,就一直除以2,如果能被3整除就一直除以3,如果能被5整除,就一直除以5,最后的结果一定是1。按照这种思路,从数字1开始判断直到

2017-12-10 22:28:20 2507

原创 剑指Offer---栈的压入和弹出序列

【题目】      输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)【代码实现】bool IsPopOrder(vector<int> pushV,

2017-12-06 09:55:10 290

原创 C++常用操作总结

数组,向量,字符串,栈,队列,链表,字典,集合,文件读写,异常处理

2017-11-30 16:17:13 380

转载 C++中的文件输入/输出

简介  本教程将以C++最基本的文件I/O(输出/输出)开始。此后,我将从更深入的方面,为你展示一些技巧,并分析给出一些有用的函数。 你需要对C++有一个较好的理解,否则这个教程于你而言将是陌生而毫无用处。你的第一个程序  首先我将给出一段代码,接着再逐行进行解释。我们的第一个程序将建立一个文件,并写入一些字符:   #include <fstream.h>void main() //程序从这里

2017-11-29 12:06:30 607

原创 链表问题---按照左右半区的方式重新组合单链表

【题目】  给定一个单链表的头节点head,链表长度为N,如果N为偶数,那么前N/2个节点算作左半区,后N/2个节点算作右半区;如果N为奇数,那么前N/2个节点算作左半区,后N/2+1个节点算作右半区。左半区从左到右依次是L1 -> L2 ->…,右半区从左到右依次是R1 -> R2 ->…,请将单链表调整成L1 -> R1 -> L2 -> R2 ->…的形式。【基本思路】  先遍历一遍找到左半区

2017-11-21 16:56:37 534

原创 链表问题---合并两个有序的单链表

【题目】  给定两个有序单链表的头节点head1和head2,请合并两个有序链表,合并后的链表依然有序,并返回合并后链表的头节点。【代码实现】#python3.5def merge(head1, head2): if head1 == None or head2 == None: return head1 if head2 == None else head2 he

2017-11-21 14:07:05 413

原创 链表问题---向有环的环形链表中插入新节点

【题目】  一个环形单链表从头节点开始不降序,同时由最后的节点指向头节点。给定这样一个环形单链表的头节点head和一个整数num,请生成节点值为num的新节点,并插入到这个环形链表中,保证调整后的链表依然有序。【基本思路】  令变量pre= head,cur = head.next,然后令pre和cur同步移动下去,如果遇到pre的值小于等于num并且cur的值大于等于num,则将num产生的节点插

2017-11-21 13:58:46 471

原创 链表问题---一种怪异的节点删除方式

【题目】  链表的节点类型是int型,给定一个链表中的节点node,但不给定整个链表的头节点。如何在链表中删除node?请实现这个函数,并分析这么做会出现哪些问题。  要求:时间复杂度O(1)。【基本思路】  实现方法很简单,令node节点的值等于下一个节点的值,之后删除node的下一个节点即可。这样做有很大的问题:  问题一:无法删除最后一个节点,因为最后一个节点没有next节点,也不能直接将最后

2017-11-21 13:45:56 490

原创 链表问题---单链表的选择排序

【题目】  给定一个无序链表的头节点head,实现单链表的选择排序。   要求:空间复杂度O(1)。【基本思路】  选择排序的过程是从未排序的部分中找到最小值,然后放在已经排好序部分的尾部,逐渐将未排序的部分缩小,最后全部变成排好序的部分。时间复杂度O(N2N^2)。【代码实现】#python3.5def selectionSort(head): def getSmallestPre(h

2017-11-21 13:19:41 800

原创 链表问题---将搜索二叉树转换成双向链表

【题目】  对二叉树的节点来说,有本身的值域,有指向左孩子和右孩子的两个指针;对双向链表的节点来说,有本身的值域,有指向上一个节点和下一个节点的指针。在结构上,两种结构有相似性,现在有一棵搜索二叉树,请将其转换为一个有序的双向链表。最后返回转换后的双向链表的头节点。【基本思路】  方法一。时间复杂度O(N),空间复杂度O(N)。  使用队列等容器收集二叉树中序遍历的结果,收集完毕后在按照队列中的顺序

2017-11-21 13:11:14 560

原创 python连接mysql并让mysql支持中文

ubuntu下安装mysqlsudo apt-get install mysql-serversudo apt-get install mysql-client  在安装过程中会提示确认输入YES,设置 root 用户密码(之后也可以修改)等,稍等片刻便可安装成功。  之后可以使用如下命令打开mysql:sudo service mysql startmysql -u root -p #如

2017-11-19 16:56:14 1520

原创 链表问题---在单链表中删除指定值的节点

【题目】  给定一个链表的头节点head和一个整数num,请实现函数将值为num的节点全部删除。【基本思路】  方法一。时间复杂度O(N),空间复杂度O(N)。  利用栈或者其他存储结构。将不等于num的节点收集起来,收集完成后再重新连接即可。代码实现如下:#python3.5def removeValue1(head, num): if head == None:...

2017-11-19 10:35:46 1730

原创 链表问题---删除无序单链表中值重复出现的节点

【题目】  给定一个无序单链表的头节点head,删除其中值重复出现的节点。  请按以下要求实现两种方法。方法一。时间复杂度O(N)。方法二。空间复杂度O(1)。【基本思路】  方法一。利用哈希表,依次遍历每一个节点,如果这个节点的值已经存在于哈希表中,将该节点删除;否则,将该节点的值添加到哈希表中。代码实现如下:#python3.5def removeRepeatNode(head):

2017-11-19 10:28:47 1930 1

原创 链表问题---将单链表的每K个节点之间逆序

【题目】  给定一个单链表的头节点head,实现一个调整单链表的函数,使得每K个节点之间逆序,如果最后不够K个节点,则不调整最后的节点。【基本思路】  方法一。时间复杂度O(N),空间复杂度O(K)。      利用栈结构,依次遍历链表,将节点压入栈中,栈中节点每凑到k个就将这k个节点进行逆序,然后再连接入链表中。需要注意头节点的更新以及每组节点两头的连接。代码实现如下:#python3.5d

2017-11-19 10:19:49 2041

原创 链表问题---两个单链表相交的一系列问题

【题目】  在本题中,单链表可能有环,也可能没环。给定两个单链表的头节点head1和head2,这两个单链表可能相交,也可能不相交。请实现一个函数,如果两个链表相交,请返回相交的第一个节点;如果不相交,返回null即可。 要求,时间复杂度O(N+M),空间复杂度O(1)。【基本思路】  该问题可以分解成三个子问题:      问题一:如何判断一个链表是否有环,如果有的话返回第一个...

2017-11-17 10:53:42 903 2

原创 链表问题---两个单链表生成相加链表

【题目】假设链表中每一个节点的值都在0~9之间,那么链表整体就可以代表一个整数。 例如:9 -> 3 -> 7,可以代表整数937。 给定两个这种链表的头节点head1和head2,请生成代表两个整数相加值的结果链表。 例如:链表1为9 -> 3 -> 7,链表2为6 -> 3,最后生成新的结果链表为1 -> 0 -> 0 -> 0。【基本思路】  容易想到的方法是先将两个链表的值表示出来,然

2017-11-13 18:33:37 1228 2

原创 链表问题---复制含有随机指针节点的链表

【题目】  一种特殊的链表节点类型描述如下:class Node: def __init__(self, data): self.val = data self.next = None self.rand = None  Node类中的value是节点值,next指针和正常单链表中next指针的意义一样,都指向下一个节点,rand指针是Node

2017-11-13 16:28:11 494

原创 链表问题---将单向链表按某值划分成左边小,中间相等,右边大的形式

【题目】  给定一个单向链表的头节点head,节点的值类型是整型,再给定一个整数pivot。实现一个调整链表的函数,将链表调整为左部分都是值小于pivot的节点,中间部分都是值等于pivot的节点,右部分都是值大于pivot的节点。除这个要求外,对调整后的节点顺序没有更多的要求。【进阶题目】  在原问题的要求之上再增加如下两个要求:在左、中、右三个部分的内部也做顺序要求,要求每部分里的节点从左到右

2017-11-13 11:09:04 1688 3

原创 链表问题---判断一个链表是否为回文结构

【题目】  给定一个链表的头节点head,请判断该链表是否为回文结构。   进阶:如果链表长度为N,要求时间复杂度O(N),空间复杂度O(1)。【基本思路】  方法一。时间复杂度O(N),空间复杂度O(N)。      使用栈,遍历一遍链表把每个节点都压入栈中,这样在弹出栈的时候,所有的节点就逆序了。依次对比原链表的每个节点即可。#python3.5def isPalindrome1(hea

2017-11-13 09:45:24 935 4

原创 其他题目---邮局选址问题

【题目】  一条直线上有居民点,邮局只能建在居民点上。给定一个有序整型数组arr,每个值表示居民点的一维坐标,再给定一个正数num,表示邮局数量。选择num个居民点建立num个邮局,使得所有的居民点到邮局的总距离最短,返回最短的总距离。【基本思路】  方法一。动态规划。首先解决一个问题,如果在arr[0…j]上只能建立一个邮局,最短总距离是多少?如果居民点有奇数个,邮局建在最中间的那个居民点可以使总

2017-11-12 20:13:35 7901

C语言常见的问题集

1.1 我如何决定使用那种整数类型? 如果需要大数值 (大于 32,767 或小于 −32,767), 使用 long 型。否则, 如果空 间很重要 (如有大数组或很多结构), 使用 short 型。除此之外, 就使用 int 型。如 果严格定义的溢出特征很重要而负值无关紧要, 或者你希望在操作二进制位和字 节时避免符号扩展的问题, 请使用对应的无符号类型。但是, 要注意在表达式中混 用有符号和无符号值的情况。 尽管字符类型 (尤其是无符号字符型) 可以当成 “小” 整型使用, 但由于不可预 知的符号扩展和代码增大有时这样做可能得不偿失。使用无符号字符型有所帮助; 类似的问题参见问题 12.1。 在选择浮点型和双精度浮点型时也有类似的权衡。但如果一个变量的指针必 须为特定的类型时, 以上规则不再适用。

2018-05-22

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除