
job
文章平均质量分 75
五道口纳什
wx公众号/B站:五道口纳什
展开
-
1+2+3+...+100 不允许使用乘法和除法,条件分支循环等
那几乎只剩下递归这一个程序结构了。def sln(n): tol = n if n > 0: tol += sln(n-1) return tol当然因为 Python 语法的限制(+=返回值为 None,不像 C/C++ 返回值为左值),结构没有 C++ 的实现来得精巧。int sln(int n) { int sum = n; bool f原创 2016-11-02 21:32:36 · 1415 阅读 · 0 评论 -
神奇的位运算
~:各位取反运算首先需要明确的一点:计算机存储的是二进制,是补码。~(取反运算)针对的便是补码,而且是对全部的二进制位进行取反,不论是否为符号位。5 的补码:整数的补码,仍然为其自身,0000 0101,~5 (1)各位取反,1111 1111 1111 1010 (2)发现是负数,计算机对其取反(符号位除外)再加1,1000 0000 0000 0110 ⇒ -6-5 的补码, 1000原创 2016-04-16 09:15:51 · 1030 阅读 · 0 评论 -
【笔试/面试】—— 不使用大于、小于、if 语句,实现 max 宏
max=((a+b)+abs(a−b))/2min=((a+b)−abs(a−b))/2\max=((a+b)+abs(a-b))/2\\\min=((a+b)-abs(a-b))/2 所以问题,转换为如何不使用大于、小于、if语句,实现求一个数的绝对值;int abs(int x){ return ((x>>31)&0x01)?(~x+1:x);}因此:#define MAX(原创 2016-04-16 08:45:52 · 1208 阅读 · 0 评论 -
【剑指 offer】(二十四)—— 二叉搜索树的后序遍历序列
还在于边界值的判断。边界值判断的思路:有没有进入 if 判断(也即 if 中的处理逻辑有没有被执行)关于 for 和 while 循环, 没有进入走到最后中间 break题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。{5, 7, 6, 9, 11, 10, 8} ⇒ true{7, 4, 6, 5} ⇒ falsebool VerifySeqOfBST(i原创 2016-04-15 17:18:13 · 992 阅读 · 0 评论 -
【笔试/面试】—— 从大数相减到大数求除(大数求余)
进行大数相除的一个简单思路是:从被除数中减去除数,每减去一次,就将结果加1,直到被除数小于除数为止,此时的被除数即为大数求余的余数。从被除数中减去除数使用的是大数减法,结果+1使用的是大数加法。原创 2016-04-14 20:49:47 · 1865 阅读 · 0 评论 -
【笔试/面试】—— 从同余定理到大数求余
所谓大数,即为无法使用诸如 int/long等基本数据类型保存的数据,比如1234656789101112,显然在 Python 世界不存在任何关于整型精度的问题。既然无法使用基本数据类型保存大数,我们就使用 string 的相关操作来模拟整数的基本运算。同余定理求余算子本质上实现了一种映射,如任意一个整数对 5 求余,得到的余数只在 0, 1, 2, 3, 4 之中。(a×b)%c=(a%c×b原创 2016-04-14 20:21:04 · 2836 阅读 · 0 评论 -
【笔试/面试】—— 二叉树的最远距离
问题定义如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义“距离”为两节点之间边的个数,写一个程序求一棵二叉树中相距最远的两个节点之间的距离。 分析计算一个二叉树的最大距离有两个情况:情况 A:路径经过左子树的最深节点,通过根节点,再到右子树的最深节点;情况 B:路径不穿过根节点,而是左子树(右子树为空)或右子树(左子树为空)的最大距离路径,取其大者;只需计算这两个原创 2016-04-13 17:28:52 · 1321 阅读 · 0 评论 -
【笔试/面试】—— 二叉树的深度和宽度
二叉树这一数据结构,为算法设计带来, logN\log N 的时间复杂度因子; 递归的程序结构。 二叉树的深度:从根节点(root node)到叶子节点(leaf node)依次经过的节点(含内部节点(internal node),也含根节点和叶节点)形成树的一条路径,最长路径的长度为树的深度。二叉树的宽度:二叉树的每一层都有一定数量的节点,节点数最多的那一层的节点数叫做二原创 2016-04-13 16:44:30 · 1610 阅读 · 0 评论 -
【笔试/面试】排列组合与概率计算(三)
1. 爸爸去哪儿中的3对父子站成一排,各自父子之间不能相邻,比如石头不能和郭涛挨着,以此类推,共有几种站法?不妨假设三对父子分别是:Aa,Bb,Cc;我们通过逐个遍历位置的方式计算最后的排列数:第一个位置没有任何限制,可能的站法为 6;(不失一般性的,以 A 为例)第二个位置有两个限制,1. 不能为第一个位置上的人,2. 不能为其儿子(或者父亲),则可能的站法为 4;(不失一般性的,以 B 为例原创 2016-04-02 09:50:58 · 2802 阅读 · 1 评论 -
[面试] C++ STL(一)—— 向一个vector中添加N个元素,平均的添加的性能是?
考虑如下的代码输出:int N = 100;vector<int> v;set<int> s;for (int i = 0; i < N; ++i){ s.insert(v.capacity()); v.push_back(i);}for (auto& e : s) cout << e << " ";cout << endl;可以看到空间的变化是0,1,2,4,原创 2016-03-28 09:38:13 · 5777 阅读 · 0 评论 -
[面试] C/C++ 语法(二)—— 二维数组
int mat[][5] = {{1, 2, 8, 9}, {2, 4, 9, 12}};mat[0] ==> 第一行 mat[0][0] 第一行第一列,1 mat[0][1] 第一行第二列,2mat[1] ==> 第二行 mat[1][0] 第二行第一列,2 mat[1][1] 第二行第二列,41. 二维数组行数和列数的获得int原创 2016-03-26 20:53:32 · 2183 阅读 · 0 评论 -
【笔试/面试】排列组合与概率计算(二)
基本公式(1)排列Amn=(n−m)!n! A_n^m=\frac{(n-m)!}{n!} (2)组合(nm)=n!m!(n−m)! \binom nm=\frac{n!}{m!(n-m)!} (3)排列组合的关系Amn=m!Cmn A_n^m=m!C_n^m bootstrap 抽样对 NN 个样本进行 bootstrap 抽样(又放回抽样)NN 次,则抽样构成的 NN 个数据原创 2016-03-25 08:10:29 · 3366 阅读 · 2 评论 -
[面试] C/C++ 语法(五) —— extern
在 A.cpp 文件中引用 B.cpp 中的全局变量 B.cpp 中的全局变量是全局可见,但须使用 extern 显示声明。显然是不可以在 A.cpp 中对 B.cpp 进行直接包含的(#include "b.cpp"),解决方案是在 A.hpp 文件中使用 extern 关键字,A.hpp 头文件架起了 A.cpp 和 B.cpp 的桥梁。共如下的三个文件:(1)A.hpp(2)A.cp原创 2016-03-27 10:09:59 · 1147 阅读 · 0 评论 -
直线分割平面问题(数学归纳法)
试问平面上 nn 条彼此相交而无三者共点的直线能够把平面分割成多少部分?我们先从简单的事实出发,设平面分为 SnS_n 部分,n=1n=1,Sn=2S_n=2n=2n=2,Sn=4S_n=4n=3n=3,Sn=7S_n=7n=4n=4,Sn=11S_n=11n=5n=5,Sn=15S_n=15由观察发现:S1=1+1S2=1+1+2S3=1+1+2+3S_1=1+1\\S_2=1+1原创 2016-06-20 20:45:58 · 9498 阅读 · 1 评论 -
笔试常见逻辑题
1. 心理学翻卡片2. 经济学家的逻辑3. 道理与逻辑原创 2016-09-21 15:42:12 · 2024 阅读 · 0 评论 -
【笔试/面试】数组及其内存结构
从变量到数组一个 int 类型变量,占有 4 个字节的内存(32 位机),其中第一个字节的位置,我们成为该变量的内存地址。而且,一个 int 类型的变量,它的内存结构就是“4 个 连续的字节”,如下图所示: int main(){ int a; cout << &a << endl; // 0017FB38}数组变量占用内存原创 2016-04-02 10:47:28 · 1002 阅读 · 0 评论 -
【智力题】—— 猴子分桃
原题是这样的:5 只猴子一起摘了 1 堆桃子,因为太累,它们商量决定,先睡一觉再分。过了不知多久,来了第一只猴子,它见别的猴子没来,便将这一堆猴子分成五份,结果多出 1 个,就将多的这个吃了,顺便拿走其中的 1 堆。又过了不知多久,第 2 只猴子来了,它不知道有 1 个同伴已经来过,误以为自己是第 1 个到的呢,于是将地上的桃子堆起来,平均分成五份,发现也多了 1 个,同样吃了这 1 个,拿走其中的原创 2016-06-15 17:07:18 · 3365 阅读 · 0 评论 -
如何通过投掷一枚硬币产生各种概率
一枚均值硬币(fair coin)产生0.25, 0.75的概率分布投掷(toss)一枚硬币,正面向上为1,反面向上为0。连续投掷两次,11为1:对应概率为0.25,{10, 01, 00}为0:对应概率为0.75。也即此时的随机变量(rv,random variable)XX 为投掷两次的与(and)值。应用:A, B, C, D的四个选项,用一枚硬币产生每个选项相等的概率,也即各位0.25.A原创 2016-01-07 08:21:41 · 8253 阅读 · 2 评论 -
【笔试/面试】—— 判断一个链表是否有环
链表的有环无环性,也即是否尾部的 next 指向 head,是否首尾相连。要求不能使用标志位,最多只能用两个额外指针。思路:设置两个指针,一个每次递增一步,一个每次递增两步,如果有环的话,二者必然重合;如果无环,快指针走到最后,程序会退出。struct Node{ int val; Node* next;};bool check(Node* head){ if (!h原创 2016-04-18 10:35:03 · 1033 阅读 · 0 评论 -
【笔试/面试】—— 奇葩 C/C++ 语法题(二)
类所占空间的大小在类中,如果什么都没有,则类占用1个字节,一旦类中有其他的占用空间成员,则这1个字节就不在计算之内,如一个类只有一个int则占用4字节而不是5字节。如果只有成员函数,则还是只占用1个字节,因为类函数不占用空间。虚函数因为存在一个虚函数表(指针 vptr),需要4个字节(虚表指针,用于指向虚表 vtable)。原创 2016-04-02 16:52:34 · 1097 阅读 · 0 评论 -
【笔试/面试】—— 计算一个数二进制形式中 0 的个数
(1)计算一个数二进制形式的位数:⌊log2(n)⌋+1 \lfloor\log_2(n) \rfloor+1 numOfDigits = lambda n: int(math.log(n, 2)) + 1(2)计算一个数二进制形式 1 出现的次数;对 x &= x-1; 进行统计计数def numOf1(n): cnt = 0 while n: cnt +=原创 2016-04-18 08:30:31 · 1869 阅读 · 0 评论 -
【笔试/面试】—— 数学找规律题
所谓找规律其实是寻找一个函数 f(x)f(x),一个映射。题目 1:7 or 22已知: 3 + 4 ⇒ 19, 5 + 6 ⇒ 41, 问 1 + 3 ⇒ ?题目的解不唯一:(1) 解法 1(3+4)=(3+4+3*4) ⇒ 19 (5+6)=(5+6+5*6) ⇒ 31 即 f(x,y)=x+y+x×yf(x,y)=x+y+x\times y 则:(1+3)=(1+3+1原创 2016-04-30 08:24:59 · 11448 阅读 · 0 评论 -
【笔试/面试】—— 从余弦定理到三角形两边之和大于第三边的证明
所谓余弦定理: c2=a2+b2−2abcos(γ)c^2=a^2+b^2-2ab\cos(\gamma) 其中 cc 是 γ\gamma 角的对边,a、ba、b 是 γ\gamma 的邻边。所以有: (a+b)2=a2+b2+2ab>a2+b2−2abcos(γ)=c2(a+b)^2=a^2+b^2+2ab> a^2+b^2-2ab\cos(\gamma)=c^2γ=π⇒cos(γ)原创 2016-04-17 11:23:49 · 2424 阅读 · 0 评论 -
【笔试/面试】—— Linux(块设备与字符设备/cron 和 crontab)
cron 和 crontabcron 是 Linux 下的定时执行工具(相当于 windows 下的 scheduled task),可在无需人工干预的情况下定时地运行任务 task。crond 位于:/etc/rc.d/init.d/crond# or/etc/init.d# or/etc/init.d# or /etc/rc.d/rc5.d/S90crond最终引用:/var/loc原创 2016-04-11 19:10:25 · 1197 阅读 · 0 评论 -
【笔试/面试】SQL 经典面试题
基本概念(1)any/all,构成 where 子句的条件判断,any:表示或(or)的概念,all:则表示与(and)的概念,这两个关键字的出现是为了语句的简化;(2)先分组再做聚合,逻辑上也应当如此,聚合(取最值)之后便无分组的必要;select region, sum(population), sum(area) from bbc group by region;(3)group by原创 2016-04-05 23:17:49 · 18328 阅读 · 1 评论 -
【剑指 offer】—— 浮点数的相等性判断
bool equal(doubel x1, double x2){ return (x1 - x2) < 0.0000001 && (x1 - x2) > -0.0000001 ? true : false;}原创 2016-04-02 20:55:50 · 1010 阅读 · 0 评论 -
【剑指 offer】(48)—— 不能被继承的类
题目:请用 C++ 设计不能被继承的类。原创 2016-04-02 18:21:00 · 1054 阅读 · 0 评论 -
【笔试/面试】—— 序列全排列(递归版)
void perm(int seq[], int k, int m){ if (k == m) { copy(seq, seq+m, ostream_iterator<int>(cout, " ")); cout << endl; return; } for (int i = k; i < m; ++i) {原创 2016-04-02 17:26:37 · 1036 阅读 · 0 评论 -
【笔试/面试】—— 奇葩 C/C++ 语法题
1. 常量(const)初始化(1)普通常量(const int)必须初始化(2)常量指针(const int* ,int const *)不必初始化(3)指针常量和普通常量一样必须初始化;int main(int, char**){ const int x = 10; // 普通常量必须初始化 const int* p;原创 2016-04-02 10:02:10 · 1417 阅读 · 0 评论 -
Tricks(二十)—— 从 N 个数中等概率地产生 M 个数
等概率自然就是每个数被选中的概率为: p=mNp=\frac mN 通过 if 条件判断,以及 rand() 随机数产生器,我们可轻易产生这样的概率判断:float p = m/float(N);if (rand()/float(RAND_MAX) < p){ ...}在 N≫mN \gg m 的情况下,我们可实现一种简易版的随机数生成器:int m, N = 10, 1000原创 2016-04-02 15:21:26 · 1376 阅读 · 0 评论 -
【笔试/面试】—— 网络
HTTP 协议(1)HTTP是基于TCP协议之上的应用层协议(2)HTTP 是文本协议(Hyper Text Transfer Protocol),而非二进制协议;(3)HTTP 协议的 ETAG 响应头主要用于信息的过期验证;(4)cache-control是在 HTTP1.1 中才有的。文本协议、二进制协议简单的文本协议、二进制协议写网络程序躲不过协议,协议其实就是定义了消息的格式,以原创 2016-04-02 11:26:26 · 1109 阅读 · 0 评论 -
【剑指 offer】(十)—— 二进制形式 1 的个数
可能引起死循环的解法int numOf1(int n){ int cnt = 0; while (n) { if (n & 1) ++cnt; n >>= 1; } return cnt;}把整数右移一位和把整数除以 2 在数学上是等价的,那上面的代码可以把右移运算换成除以 2 吗?答案是否定的。因为原创 2016-03-29 21:54:08 · 987 阅读 · 0 评论 -
逻辑思维与C/C++解题
谁在说谎考虑这样一些陈述:西电有四位同学中的一位做了好事,分别询问,他们的回答分别是: - A说:不是我 - B说:是C - C说:是D - D说:C胡说已知四人中三人说了真话,一人说的是假话,请问谁说了谎话,谁做的好事。通过简单的规约我们即可获得答案,B和C有一人说谎,A和D自然说的都是实话,D说:C胡说,则C说慌,C是做好事的人。我们如何交由计算机实现呢?枚举法。原创 2015-12-26 15:09:57 · 3450 阅读 · 0 评论 -
工作的准备
代码规范必要的注释(尤其是基于某数学公式,否则将很难看懂)def bern(theta, N, k): return np.clip(comb(N, k)*theta**k*(1-theta)**(N-k), 0, 1)def bern(theta, N, k): """Bernoulli likelihood with N trials and k successes."""原创 2016-01-06 20:54:07 · 1001 阅读 · 0 评论 -
[面试]——用一行代码判断两矩形是否相交
typedef struct{ int left; // leftmost: 最左 int top; // topmost: 最上 int right; // rightmost: 最右 int bottom; // bottommost:原创 2016-01-20 13:05:35 · 15690 阅读 · 2 评论 -
三个瓶盖能换一瓶水,问100个人需要喝水,最少需要买多少瓶水即可解决100人的喝水问题
三个瓶盖能换一瓶水,问100个人需要喝水,最少需要买多少瓶水即可解决100人的喝水问题原创 2016-01-17 20:20:18 · 7177 阅读 · 1 评论 -
【笔试/面试】—— linux(rpm)
如果你要查找,/etc/my.cnf 文件属于包,可以执行: rpm -qf /etc/my.cnf。参数:rpm -ivh package_name-i:install-v:查看详细的安装信息画面-h:以安装信息栏显示安装进度# 升级与更新(upgrade/freshen)-Uvh:后面接的软件即是没有安装过,则系统将予以直接按装;若后面接的软件有安装过旧版,则系统自动更新自新版;-F原创 2016-04-12 08:53:19 · 1476 阅读 · 0 评论 -
【笔试/面试】—— linux 拾遗(一)
(1)如果当前系统是在 level 3 下运行,怎样不重启系统即可转换到 level 5 运行?telinit 5(2)atq:查询目前主机上面所有的 at 工作调度;find 查询find /home -name 'install.*'/home,包括其下的子目录下的以文件名以 install. 开头的全部文件;原创 2016-04-12 09:07:13 · 1677 阅读 · 0 评论 -
[面试] C/C++ 语法(七)—— C++ 类型转换
static_cast:编译器认可的转型reinterpret_cast:用在编译器不认可的类型转换const_cast:消除常量性以上三种都属于静态转换,dynamic_cast:是安全的向下转型,需要运行时支持,是一种动态转型原创 2016-03-27 12:23:06 · 1033 阅读 · 0 评论 -
[面试] C/C++ 语法(六)—— RTTI(运行时类型信息)
RTTI(RunTime Type Information),顾名思义,对象运行时类型信息,以便在运行时进行类型识别。C++ 的对象识别可通过以下三个技术得以实现:(1)dynamic_cast 运算符(类型安全的向下转型)向下转型是不安全的,多态基类指针转换派生类指针时是类型安全的;(2)typeid 运算符(3)type_infoclass Shape{public: vir原创 2016-03-27 12:19:44 · 1994 阅读 · 0 评论