![](https://img-blog.csdnimg.cn/20201014180756927.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
C++
会飞的猪宝宝啊
这个作者很懒,什么都没留下…
展开
-
LeetCode 2.1.5:已知两个有序的数组,找其中的中位数
问题描述:已知两个有序的序列,找到他们的中位数,复杂度要求O(log(m+n))问题分析:代码:class Solution{public: double FindMin(const vector<int> &A,const vector<int> &B) { const int m = A.size(); const in...原创 2018-11-15 15:36:52 · 106 阅读 · 0 评论 -
C++:多态
面向对象思想:面向对象是将功能等通过对象来进行实现,让对象去实现具体的细节,这种思想是将数据作为第一位,而方法以及算法为次要的,这是对数据的一种优化,简化了过程。面向对象的三大特性:封装性、继承性、多态性封装性:是将一类事物或者行为抽象成一个类,使其属性私有化,行为公有化,提高了数据隐私性,这样使得代码的复用性更高。继承性:是进一步将一类事物共有的属性和行为抽象成一个父类,而每一个子类...原创 2018-11-14 21:31:48 · 93 阅读 · 0 评论 -
C++默认函数与深浅拷贝
形参与实参形参:是函数声明时的参数,只说明参数名和类型,不是实际的参数,不能真正使用。实参:运行时传给函数的参数,是实际的变量,形参在这时真正地被分配空间,并且赋值了实参的值。一个函数的实参在内存中有自己固定的内存,直到函数执行结束才释放内存。而形参没有固定的内存,只在调用函数的时候有一个虚拟内存,等调用完毕就不再有内存。他们的关系是函数调用的时候,实参把值传给形参构造函数(1...原创 2018-11-19 19:49:52 · 144 阅读 · 0 评论 -
一致性哈希算法
为什么要用一致性哈希算法?首先我们先介绍哈希算法!哈希算法假如有三台服务器编号0、1,2,有三张图片分别是S0、S1、S2,现在为了分担缓存压力,想要三张图片均匀的缓存到三台服务器上。现在将缓存下来的键进行哈希算法:但是哈希算法也有缺点,假如现在增加服务器,从原来的的三台变成了四台,情况就会改变就是因为哈希算法的缺陷很大,所以有了一致性哈希算法一致性哈希算法...原创 2018-11-17 17:57:01 · 159 阅读 · 0 评论 -
两个队列实现一个栈&两个栈实现一个队列
两个队列实现一个栈 //两队列实现一个栈class NewStack{public: void in(int c) { q1.push(c); } int pop() { int len1 = q1.size(); int c; for(int i = 0;i < len1 - 1;i++) { q2.push(q1.front()...原创 2018-12-02 15:57:05 · 198 阅读 · 0 评论 -
线程安全的单例模式
线程安全的单例模式懒汉模式第一次调用GetInstance时会实例化对象,此后返回的都是该对象template<class T>class SingleTon{public: static T* GetInstance(){}private: SingleTon(){} SingleTon(const SingleTon &){} SingleTo...原创 2018-12-02 16:30:16 · 280 阅读 · 0 评论 -
排序算法之归并排序
void Merge(int *arr,int *tmp,int start,int mid,int end){ int left = start; int right = mid+1; int index = start; while((left < mid+1) && (right < end+1))//左右都不越界 { if(arr[...原创 2018-12-02 17:31:58 · 143 阅读 · 0 评论 -
排序算法之冒泡排序
void BubbleSort(int *arr,int len){ int i,j,tmp; bool flg; for(i = 0;i < len-1;i++) { for(int j = 0;j < len-1-i;j++) { if(arr[j] > arr[j+1]) { tmp = arr[j]; arr[j...原创 2018-12-02 17:55:14 · 116 阅读 · 0 评论 -
排序算法之堆排序
void Adjust(int *arr,int start,int end){ int tmp = arr[start]; for(int i = 2*start+1;i <= end;i = 2*i+1) { if((i+1 <= end) && (arr[i] < arr[i+1])) { i...原创 2018-12-01 16:41:08 · 93 阅读 · 0 评论 -
排序算法之希尔排序
void Shell(int *arr,int len,int gap){ int tmp,i,j; for(i = gap;i <len;i++) { tmp = arr[gap]; for(j = i-gap;j >= 0;j = j-gap) { if(arr[j] <= tmp) { break; } els...原创 2018-12-01 17:13:33 · 131 阅读 · 0 评论 -
C++新特性
类型推导 Auto利用模板可以将不同类型的变量相加,之后用auto接收结果进行类型推导遍历容器时,原先的通过迭代器遍历现在可以通过一种新的方式来遍历空指针 nullptr之前的NULL空指针实质上是一个int型的0,现在C++11新增nullptr_t空值类型,它只有一个空值常量nullptrtypedef decltype(nullptr) null...原创 2019-09-11 15:25:08 · 231 阅读 · 0 评论 -
漫长刷题路:twoSum系列
一、TwoSum返回下标Given nums = [2, 7, 11, 15], target = 9,Because nums[0] + nums[1] = 2 + 7 = 9,return [0,1].(返回数组下标)思路:用哈希表降低时间复杂度class Solution{public: vector<int> twoSum(vector<in...原创 2019-09-12 15:05:59 · 129 阅读 · 0 评论 -
漫长刷题路:去除重复
Given nums = [0,0,1,1,1,2,2,3,3,4],Your function should return length = 5, with the first five elements of nums being modified to 0, 1, 2, 3, and 4 respectively.It doesn't matter what values are set...原创 2019-09-12 15:45:11 · 196 阅读 · 0 评论 -
线程与进程
线程产生的原因然而为使程序能并发执行,系统还必须进行以下的一系列操作:(1)创建进程。系统在创建进程时,必须为之分配其所必需的、除处理机以外的所有资源。如内存空间、I/0设备以及建立相应的PCB。(2)撤消进程。系统在撤消进程时,又必须先对这些资源进行回收操作,然后再撤消PCB。(3)进程切换。在对进程进行切换时,由于要保留当前进程的CPU环境和设置新选中进程的CPU环境,为此需花...原创 2018-11-22 00:12:06 · 201 阅读 · 0 评论 -
i++与++i
i++与++i 谁的效率的高?表面上:++i就是i = i+1i++也是i =i+1,但是表达式的值是i+1之前的副本,由于要保存副本,因此效率低一点点。但是对于C++内置类型而言,大部分编译器会进行优化,因此效率没有什么区别,但是自定义类型上就未必有优化。汇编上:执行数目一样,效率没差别重载上://i++int operator(int){ i...原创 2018-11-21 22:41:39 · 137 阅读 · 0 评论 -
LeetCode 2.1.6:给定一个未排序的整数数组,找到最长的连续长度。
问题描述:给定一个未排序的整数数组,找到最长的连续长度。Eg:[100, 4, 200, 1, 3, 2], 最长连续长度为4,子数组为[1,2, 3, 4]. 问题分析:我们先定义一个map<int, int>,遍历一遍数组,将(key, value)存入map,key是数组中的每一个数,value是1。接着,我们再遍历一遍数组,对于当前遍历的某个数 k,我们定义一个值 ...原创 2018-11-15 20:56:51 · 3687 阅读 · 0 评论 -
关于Linux TCP接收缓存以及接收窗口的一个细节解析
TCP窗口 关于TCP的接收缓存以及通告窗口,一般而言懂TCP的都能说出个大概,但是涉及到细节的话可能理解就不那么深入了。由于我最近的工作与TCP有关,顺便又想起了很久之前遇到的一个问题:明明在接收端有8192字节的接收缓存,为什么收了不到8000字节的数据就ZeroWindow了呢?当时我的解决方案是直接扩大接收缓存完事,然后就没有然后了。后来深挖了一下细节,发...转载 2018-11-18 17:02:01 · 1135 阅读 · 0 评论 -
虚拟地址空间
虚拟地址空间:(1).text代码段:存放程序执行的一块内存区域,此区域大小在运行之前就已经确定下来了。(2).data数据段:(全局初始化数据区/静态数据区)只初始化一次,指用来存放程序中已初始化的全局变量的一块内存区域(已经初始化的全局变量、静态变量和常量)(3).bss未初始化数据区:用来存放程序中未初始化的全局变量的一块内存区域,属于静态内存分配,程序开始就将其清零了。(4)...原创 2018-11-14 22:53:57 · 1230 阅读 · 0 评论 -
C++ : String类
class String{public: String(const char *str = NULL); ~String(); String(const String &other); String &operator = (const String &other);private: char *data;};String::String(const...原创 2018-11-14 23:32:54 · 82 阅读 · 0 评论 -
inline与static
inline函数inline函数的目的是解决程序中函数调用的效率问题,也是用内联取代了宏定义(函数传参比宏方便)inline只是一种对编译器的建议请求,能阻止这样建议的条件: a.循环语句switch/goto b.递归函数 c.含static函数inline在类体中和类外定义成员函数是有区别的,在类体定义的成员函数为inline函数,在类外定义的不是。 a.如...原创 2018-11-15 00:09:28 · 1613 阅读 · 0 评论 -
map与unordered_map的区别
内部的原理实现:map:【头文件为#include<map>】map内部是一颗红黑树(非严格平衡二叉树),红黑树有自动排序的功能,所以map内部的所有元素都是有序的,红黑树的每一个节点都代表这map的一个元素。因此对map进行插入、删除、查找等操作都是相当于对红黑树进行操作。最后根据树的中序遍历可以将键值按照大小顺序遍历出来。unordered_map:【头文件#include...原创 2018-11-16 20:47:05 · 3849 阅读 · 0 评论 -
LeetCode 2.1.7 Two Sum
问题描述:给定一个整数, 从里面找出两个数, 其和等于一个指定的整数. 程序返回这两个数在数组中的位置( 数组下标从1开始 ) , 且位置小的在前面. 问题分析:一开始想的定义两个指针p1和p2,分别指向数组的开始和结尾,num[p1] + num[p2]与key的大小,相等则返回,如果key小,p2--,否则p1++,循环条件是p1 < p2。但是现在有一种更好的方法就是用哈希表存储,...原创 2018-11-16 22:34:07 · 82 阅读 · 0 评论 -
LeetCode 2.1.8 3Sum
问题描述:Given an array S of n integers, are there elements a; b; c in S such that a + b + c = 0? Find all uniquetriplets in the array which gives the sum of zero.Note:• Elements in a triplet (a; b; c)...原创 2018-11-16 23:19:06 · 113 阅读 · 0 评论 -
哈希表全解
哈希表定义哈希表(Hash table),是根据关键码值(Key - value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。HashTable(key,value)就是把key通过一个固定的算法即哈希函数(散列函数)转换成一个整型数字,然后就将数字对数组的长度取余,把这个结果值作为...原创 2018-11-17 00:56:59 · 258 阅读 · 0 评论 -
memmove和memcpy的区别
memcpy和memmove都是C语言的库函数,在头文件string.h中,作用是内存拷贝,原型如下“它们的作用都是内存拷贝,唯一的区别是,当内存发生局部重叠时,memmove保证了拷贝的结果是正确的,但是memcopy不一定是正确的。但是memcpy比memmove速度快。memcpymemcpy函数从src内存中拷贝了count字节到dest内存区域,但是src和dest的内存...原创 2018-11-21 20:13:05 · 3805 阅读 · 0 评论 -
如何修改int类型的第二个字节
如何修改int类型的第二个字节?思路:重点在于分离int的四个字节,取出第二个字节,可以借助memmove来实现,因为memmove更安全,原因参考上一篇博客。首先使用memmove将int内存中的内容拷贝到字符数粗中,然后在数组中修改某个字节的值,然后再把数组中的值返回到int中。#include<string.h>#include<iostream>usi...原创 2018-11-21 21:02:27 · 693 阅读 · 0 评论 -
C++ STL中常见容器的时间复杂度
map, set, multimap, and multiset上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种。不同操作的时间复杂度近似为:插入: O(logN)查看:O(logN)删除:O(logN)hash_map, hash_set, hash_multimap, and hash_multiset上述四种容器采用哈希表实现,不同操作的时间复杂度为:插入:O(1),...转载 2018-11-21 21:03:46 · 2115 阅读 · 0 评论 -
漫长刷题路:扑克牌顺子
从扑克牌中随机抽 5 张牌,判断是不是顺子,即这 5 张牌是不是连续的。 2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王可以看成任意的 数字。(大小王最多4张)思路:1、首先我们应该关注的是大小王等特殊字符,由于可以当成任意的数字,所有当成0处理。2、把数组排序,再统计数组中0的个数3、统计排序之后的数组中相邻数字之间的空缺总数。4、数组中的非0...原创 2019-09-12 17:35:03 · 88 阅读 · 0 评论