自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

amoscykl的博客

凡有成者,必务于实。凡有所学,皆成性格。

  • 博客(46)
  • 收藏
  • 关注

转载 扫码登录是如何实现的?

网页版微信刚推出时,无数人被它的登录方式惊艳了一下,不需要输入用户名密码,打开手机微信扫一扫,便自动登录。从原理上讲,二维码只能是一段文本的编码,如何用它实现快捷登录的呢?打开网页版微信,可以看到如下的页面:微信扫码界面如果你用我查查、支付宝、新浪微博等软件扫码二维码,你会发现此二维码解析出来是如下的网址:https://login.weixin.qq.com/l/obsbQ...

2019-01-30 21:41:18 1305

原创 操作系统之内存管理

虚拟内存虚拟内存的目的是为了让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。为了更好的管理内存,操作系统将内存抽象成地址空间。每个程序拥有自己的地址空间,这个地址空间被分割成多个块,每一块称为一页。这些页被映射到物理内存,但不需要映射到连续的物理内存,也不需要所有页都必须在物理内存中。当程序引用到不在物理内存中的页时,由硬件执行必要的映射,将缺失的部分装入物理内存并重新执行失...

2019-01-29 22:14:37 728

原创 操作系统之死锁

死锁产生的必要条件 互斥:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。 占有和等待:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又对自己已获得的其它资源保持不放。...

2019-01-28 15:34:45 251

原创 操作系统之进程管理:进程通信

进程通信进程同步与进程通信很容易混淆,它们的区别在于:进程同步:控制多个进程按一定顺序执行; 进程通信:进程间传输信息。进程通信是一种手段,而进程同步是一种目的。也可以说,为了能够达到进程同步的目的,需要让进程进行通信,传输一些进程同步所需要的信息。1. 无名管道无名管道是通过调用 pipe 函数创建的,fd[0] 用于读,fd[1] 用于写。#include &l...

2019-01-28 15:19:48 1074

原创 操作系统之进程管理:进程同步

进程同步1. 临界区对临界资源进行访问的那段代码称为临界区。为了互斥访问临界资源,每个进程在进入临界区之前,需要先进行检查。// entry section// critical section;// exit section 2. 同步与互斥同步:多个进程按一定顺序执行; 互斥:多个进程在同一时刻只有一个进程能进入临界区。 3. 信号量信号量(Se...

2019-01-28 14:18:41 384

原创 操作系统之进程管理:进程调度算法

进程调度算法不同环境的调度算法目标不同,因此需要针对不同环境来讨论调度算法。 1.批处理系统批处理系统,又名批处理操作系统。批处理是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。这种采用批量处理作业技术的操作系统称为批处理操作系统。批处理操作系统分为单道批处理系统和多道批处理系统。批处理操作系统不具有交互性,它是为了提高CPU的利用率而提出的一种操作系统...

2019-01-11 19:42:05 1470

原创 手写函数:strlen(), strcpy(), strstr(), strcat(), strcmp(), memcpy()

strlen()函数功能:计算给定字符串的(unsigned int型)长度,不包括'\0'在内 实现:int strlen(const char *str) { assert(str != NULL); int len = 0; while( (*str++) != '\0') len++; return len;}  strcpy()函数功能:...

2019-01-08 19:12:02 1846 2

原创 STL中内存池的实现

STL里的内存池实现STL内存分配分为一级分配器和二级分配器,一级分配器就是采用malloc分配内存,二级分配器采用内存池。二级分配器设计的非常巧妙,分别给8k,16k,..., 128k等比较小的内存片都维持一个空闲链表,每个链表的头节点由一个数组来维护。需要分配内存时从合适大小的链表中取一块下来。假设需要分配一块10K的内存,那么就找到最小的大于等于10k的块,也就是16K,从16K的...

2019-01-06 00:53:44 4163 4

原创 C++内存管理

在C++中内存分为5个区,分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。堆:堆是操作系统中的术语,是操作系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。栈: :局部变量,函数参数等存储在该区,由编译器自动分配和释放。在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放...

2019-01-05 17:28:31 320

原创 剑指offer:删除链表中重复的节点

题目描述在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5AC C++ Solution:class Solution {public: ListNode* deleteDuplicates(List...

2019-01-05 10:01:25 192

原创 剑指offer:链表中环的入口结点

题目描述给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。  AC C++ Solution:解题思路:还是使用两个指针,一个fast,每次移动两步;一个slow,每次移动一步。                   a           b          start ------->-------->meeting (k)...

2019-01-05 10:01:19 195

原创 剑指offer:数组中重复的数字

题目描述在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。 AC C++ Solution:使用numbers[i]作为统计数组的下标,当其值等于2时,这个下标就是第一...

2019-01-05 10:01:12 232

原创 剑指offer:把字符串换成整数

题目描述将一个字符串转换成一个整数(实现Integer.valueOf(string)的功能,但是string不符合数字要求时返回0),要求不能使用字符串转换整数的库函数。 数值为0或者字符串不是一个合法的数值则返回0。输入描述:输入一个字符串,包括数字字母符号,可以为空输出描述:如果是合法的数值表达则返回该数字,否则返回0示例输入: "42"输出: 42...

2019-01-05 10:01:07 170

原创 剑指offer: 求1+2+3+...+n

题目描述求1+2+3+...+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)。 AC C++ Solution:利用递归法依次返回0,1,2,3....n,相加class Solution {public: int Sum_Solution(int n) { int res = ...

2019-01-05 10:01:02 192

原创 C++虚函数表详解

C++的虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。在这个表中,主要是一个类的虚函数的地址表,这张表解决了继承、覆盖(override)的问题,保证其能真实的反应实际的函数。这样,在有虚函数的类的实例中这张表被分配在了这个实例的内存中,所以当我们用父类的指针操作一个子类的时候,这张虚函数表就显得尤为重要了,他就像一个地...

2019-01-05 09:51:57 12115 3

原创 C++多态性与虚函数

1.什么是多态?(1)通过继承同一个基类,产生了相关的不同的派生类,与基类中同名的成员函数在不同的派生类中会有不同的实现,也就是说:一个接口、多种方法。(2)多态是面向对象的重要技术之一,它是一种行为的封装,是同一个事物所表现出来的多种形态,简单地说就是:一个接口、多种形态。(3)在运行时使用同一个成员名来调用类对象的成员函数,会调用哪个对象的成员函数呢?这就是多态要解决的问题! ...

2019-01-04 00:00:06 490

原创 剑指offer:扑克牌顺子

题目描述LL今天心情特别好,因为他去买了一副扑克牌,发现里面居然有2个大王,2个小王(一副牌原本是54张^_^)...他随机从中抽出了5张牌,想测测自己的手气,看看能不能抽到顺子,如果抽到的话,他决定去买体育彩票,嘿嘿!!“红心A,黑桃3,小王,大王,方片5”,“Oh My God!”不是顺子.....LL不高兴了,他想了想,决定大\小 王可以看成任何数字,并且A看作1,J为11,Q为12,K...

2019-01-03 23:01:11 122

原创 剑指offer:翻转单词顺序列

题目描述牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么? AC C++ ...

2019-01-03 23:01:07 145

原创 剑指offer:左旋转字符串

题目描述汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!  AC C++ Solution:一看就懂class Solution {...

2019-01-03 23:01:03 128

原创 剑指offer:和为S的两个数字

题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。 AC C++ Solution:思路:因为要找到和为S并且其乘积最小的两个数,所以从两边往中间遍历小于目标值时,左标志右移一位;大于目标值时,右标志左移一位;找到的第一对即...

2019-01-03 23:00:58 138

原创 剑指offer:和为S的连续正数序列

题目描述小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Good Luck!输出描述:输出所有和为S的连续正数...

2019-01-03 23:00:55 116

原创 剑指offer:数组中只出现一次的数字

题目描述一个整型数组里除了两个数字之外,其他的数字都出现了偶数次。请写程序找出这两个只出现一次的数字。 解题思路:先将所有数字进行异或, 异或结果=两个只出现一次的数字异或的结果,找到异或结果中1出现的第一个位置,根据此位是否为1将数组分为两个组分别进行异或,得到两个数字即为两个单独的数字! AC C++ Solution:class Solution {publi...

2019-01-03 23:00:51 219

原创 剑指offer:平衡二叉树

题目描述输入一棵二叉树,判断该二叉树是否是平衡二叉树。 AC C++ Solution:递归判断左右子树的高度差并记录高度返回给父节点class Solution {public: int dfs(TreeNode* pRoot) { if(pRoot == NULL) return 0; i...

2019-01-03 23:00:47 307

原创 剑指offer:二叉树的深度

题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。AC C++ Solution:递归class Solution {public: int TreeDepth(TreeNode* pRoot) { if(pRoot == NULL) re...

2019-01-03 23:00:44 118

原创 剑指offer:数字在排序数组中出现的次数

题目描述统计一个数字在排序数组中出现的次数。 AC C++ Solution:思路:先用二分查找找到数字在数组中的位置,然后查找该位置的左右相同的元素.class Solution {public: int searchk(vector<int> data, int lo, int hi, int k) { while(lo <= ...

2019-01-03 23:00:35 124

原创 C/C++: new和malloc的区别

属性new/delete是C++操作符,需要编译器支持。malloc/free是库函数,需要头文件支持。 参数使用new操作符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则需要显式地指出所需内存的尺寸。int *a = new int();int *a = malloc(sizeof(int)); 返回类型new操作符内存分配...

2019-01-03 11:05:34 387

原创 剑指offer:把数组排成最小的数

题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。 AC C++ Solution:关键是自定义排序器class Solution {public: string PrintMinNumber(vector<int> nu...

2019-01-02 12:24:03 130

原创 剑指offer:两个链表的第一个公共节点

题目描述输入两个链表,找出它们的第一个公共结点。 AC C++ Solution:思路: 因为第一个公共节点后面所有的节点都相同,首先计算两链表的长度差,抹平长度差距,然后再同时遍历,找到第一个公共节点/*struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), nex...

2019-01-02 12:23:55 163

原创 剑指offer:第一个只出现一次的字符

题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写) AC C++ Solution:class Solution {public: int FirstNotRepeatingChar(string str) { int n = str.l...

2019-01-02 12:23:47 114

原创 剑指offer:连续子数组的最大和

题目描述例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和。 AC C++ Solution:class Solution {public: int FindGreatestSumOfSubArray(vector<int> array) { int ...

2019-01-02 12:23:43 186

原创 剑指offer:最小的k个数

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。AC C++ Solution:class Solution {public: vector<int> GetLeastNumbers_Solution(vector<int> input, int k) { ...

2019-01-02 12:23:05 117

原创 剑指offer: 数组中出现次数超过一半的数字

题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。AC C++ Solution:class Solution {public: int MoreThanHalfNum_Solution(vector&...

2019-01-02 12:22:57 212

原创 剑指offer:字符串的排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。 AC C++ Solution:求全排列,先排序,后面的元素分别于第一个元素交换,用回溯法解决clas...

2019-01-02 12:22:52 118

原创 剑指offer:复杂链表的复制

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空) AC C++ Solution:递归/*struct RandomListNode { int label; struct Random...

2019-01-02 12:22:43 117

原创 剑指offer:二叉树中和为某一值的路径

题目描述输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前) AC C++ Solution:回溯法class Solution {public: vector&lt;vector&lt;int&gt; &gt; Fi...

2019-01-02 12:22:38 102

原创 剑指offer:从上往下打印二叉树

题目描述从上往下打印出二叉树的每个节点,同层节点从左至右打印。 AC C++ Solution:二叉树的层次遍历,借助一个队列就可以了class Solution {public: vector&lt;int&gt; PrintFromTopToBottom(TreeNode* root) { vector&lt;int&gt; res; ...

2019-01-02 12:22:34 107

原创 剑指offer:栈的压入,弹出序列

题目描述输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的) AC C++ Solution:class Solution {pu...

2019-01-01 02:01:52 169

原创 剑指offer:包含min函数的栈

题目描述定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。 AC C++ Solution:使用两个栈,一个栈保存栈的最小元素,一个栈正常保存元素.class Solution {public: void push(int value) { stackInt.push(value); ...

2019-01-01 01:18:48 135

原创 剑指offer:顺时针打印矩阵

题目描述输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 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. AC C++ Solution:用四个标志记录上下左右的位置,然后顺时针遍历class Solut...

2019-01-01 01:15:56 135

原创 剑指offer:二叉树的镜像

题目描述操作给定的二叉树,将其变换为源二叉树的镜像。输入描述:二叉树的镜像定义:源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5...

2019-01-01 01:06:15 107

空空如也

空空如也

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

TA关注的人

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