可用三种方法:
第一种暴力法,先排序再取值,快速排序O(nlogn)
第二种固定k个元素的最小堆,遍历建堆完毕后取堆顶,建堆时间复杂度O(logk),遍历数组中元素对堆进行调整工作是O(nlogk)。
第三种快速排序思想进行选择,分治后只递归一边,O(n)。
1 | // 纯手写最小堆 |
可用三种方法:
第一种暴力法,先排序再取值,快速排序O(nlogn)
第二种固定k个元素的最小堆,遍历建堆完毕后取堆顶,建堆时间复杂度O(logk),遍历数组中元素对堆进行调整工作是O(nlogk)。
第三种快速排序思想进行选择,分治后只递归一边,O(n)。
1 | // 纯手写最小堆 |
[] 指针和引用的区别
级数:从理论上来说,对于指针没有级数限制,但是引用只有一级。
1 | int** p1; // 合法。指向指针的指针 |
效率上:
其实两者的效率是一致的,因为在底层中,指针和引用的参数都指向同一个地址。在高级编程语言中,因为用*传参可能会指向空的地址或者错误的地址,所以要时时判断参数是否为空,导致降低效率。而用&传参数,则参数不可能为空或者错误地址,这也算稍微提升了一些效率。
[] 堆和栈的区别
[] new和delete是如何实现的,new 与 malloc的异同处
[] C和C++的区别
C语言是一种结构化语言,面向过程,基于算法和数据结构,所考虑的是如何通过一个过程或者函数从输入得到输出;
C++是面向对象,基于类、对象和继承,所考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题,通过获取对象的状态信息得到输出或实现过程控制。
[] C++、Java的联系与区别,包括语言特性、垃圾回收、应用场景等(java的垃圾回收机制)
[] Struct和class的区别
面向过程的编程认为,数据和数据操作是分开的。然而当struct进入面向对象的c++时,其特性也有了新发展,在c++中就能运行,因为在c++中认为数据和数据对象是一个整体,不应该分开,这就是struct在c和c++两个时代的差别。
在C++中struct得到了很大的扩充:
区别主要在于:
[] define 和const的区别(编译阶段、安全性、内存占用等)
const定义的常数是变量,也带类型,#define定义的只是个常数,不带类型。
define在预处理阶段进行替换;const在编译时确定其值;
define只进行简单的字符串替换,没有类型检查;而const由对应的数据类型,编译时会进行类型检查。
define定义的变量在预处理后存放在代码段的空间里,const修饰的变量占用数据段空间。
宏定义的作用范围仅限于当前文件,const对象使用extern声明后可以在多个文件之间共享。
[] const和static在类中使用的注意事项(定义、初始化和使用)
static数据成员的初始化必须在类外初始化;const数据成员必须在构造函数初始化列表中进行初始化,因为类成员不能声明初始化,同时const成员不能在成员函数中赋值,因为const不能被改变。
const成员函数不能改变任何一个数据成员的值,但是可以改变static成员的值。
[] C++中的const类成员函数(用法和意义),以及和非const成员函数的区别
const和非const函数是可以构成重载的,但是仅凭返回值是否为const是无法构成重载的。
若将成员函数声明为const,则该函数不允许修改类的数据成员。值得注意的是,把一个成员函数声明为const可以保证这个成员函数不修改数据成员,但是,如果据成员是指针,则const成员函数并不能保证不修改指针指向的对象,编译器不会把这种修改检测为错误。
const成员函数可以被具有相同参数列表的非const成员函数重载。
const成员函数可以访问非const对象的非const数据成员、const数据成员,也可以访问const对象内的所有数据成员,但不能修改任何变量;非const成员函数可以访问非const对象的数据成员、const数据成员,但不可以访问const对象的任意数据成员。
const成员函数只能用于非静态成员函数,不能用于静态成员函数
[] final和override关键字
[] 拷贝初始化和直接初始化,初始化和赋值的区别
[] extern “C”的用法
[] C++中的重载和重写的区别
[] C++内存管理,内存池技术(热门问题),与csapp中几种内存分配方式对比学习加深理解
[] 介绍面向对象的三大特性,并且举例说明每一个
[] C++多态的实现
1 | class A{ |
从右往左读
#
, <<
[]
count() 返回有多少个1
any() 判断是否至少有一个1
none() 判断是否全为0
set() 把所有位置成1
Mac下的oh-my-zsh主题在vscode和pycharm的终端调用里出现了问题:
参考了柳婼的博客,解决方法是加载一套支持非ASCII编码的字体。
1 | > git clone https://github.com/powerline/fonts.git |
安装好后,进入terminal,选择偏好设置->文本->字体更改
,把字体改为刚刚加载的字体(在用户集合中)。
重新打开vscode的terminal即可。
发现在其他环境下没有类似问题,应该为pycharm的颜色配置问题,主要是黑白颜色反了。
打开Pycharm的偏好设置,搜索color
关键字,打开console colors
,里面有ANSI colors
,查看相应名称的颜色是否对应正确。发现黑白颜色反了,调换过来就好。
问题的原因暂未可知,有可能是以前安装其他颜色主题的时候搞错了。
今天是伟大领袖毛泽东同志逝世四十二周年,摘录我最喜欢的一首毛泽东同志的诗词《贺新郎·读史》:
人猿相揖别。只几个石头磨过,小儿时节。铜铁炉中翻火焰,为问何时猜得?不过几千寒热。人世难逢开口笑,上疆场彼此弯弓月。流遍了,郊原血。
一篇读罢头飞雪,但记得斑斑点点,几行陈迹。五帝三皇神圣事,骗了无涯过客。有多少风流人物。盗跖庄蹻流誉后,更陈王奋起挥黄钺。歌未竟,东方白。
最近开始了实验室搬砖的生活,首先要把基础运维工作做好。其中,VPN是必不可少的,对查阅国内外文献资料,学习学习国际前沿知识都是很有帮助的。以前一直用学校和公司的VPN,现在用不了了,于是打算自己搭一个。
本文记录如何使用Vultr(VPS提供商)和Shadowsocks来搭建属于自己的VPN。