目前在阿里巴巴搬砖
Implement an iterator over a binary search tree (BST). Your iterator will be initialized with the root node of a BST.
Given an integer n, return the number of trailing zeroes in n!. Note: Your solution should be in logarithmic time complexity.
【摘要】 今天在编写socket,在期间遇到查看某个端口的状态,随后从网上找了一下,现在总结一下。 【内容】 大家都知道,端口不是独立存在的,它是依附于进程的。某个进程开启,那么它对应的端口就开启了,进程关闭,则该端口也就关闭了。
Related to question Excel Sheet Column Title Given a column title as appear in an Excel sheet, return its corresponding column number.
前言 Nginx是当前最流行的HTTP Server之一,根据W3Techs的统计,目前世界排名(根据Alexa)前100万的网站中,Nginx的占有率为6.8%。与Apache相比,Nginx在高并发情况下具有巨大的性能优势。
首先我们来定义流的概念,一个流可以是文件,socket,pipe等等可以进行I/O操作的内核对象。 不管是文件,还是套接字,还是管道,我们都可以把他们看作流。 之后我们来讨论I/O的操作,通过read,我们可以从流中读入数据;通过write,我们可以往流写入数据。
Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times. You may assume that the array is non-empty and the majority element always exist in the array. 题目大意: 找出数组中超过一半的数。
Given a positive integer, return its corresponding column title as appear in an Excel sheet. For example: 1 -> A 2 -> B 3 -> C .
接着上一篇的,从github clone下代码。 1、先查看当前开发分支 $ cat .git/HEAD ref: refs/heads/master 这里的master是默认分支。
好长时间没上来弄东西了,今天回来先开始弄下Git,之后再继续写uboot与kernel的编译,在版本控制下更加宏观地观察每次的变化。 1、在ubuntu中安装git $ sudo apt-get install git git-core 2、配置本机的git $ git config --global user.
C++语言定义了两个运算符来分配和释放动态内存。运算符new分配内存,delete释放new分配的内存。 相对于智能指针,使用这来年刚给运算符管理内存非常容易出错,随着我们逐步详细介绍这两个四月份,这一点会更为清楚。
Given two integers representing the numerator and denominator of a fraction, return the fraction in string format.
Compare two version numbers version1 and version1.If version1 > version2 return 1, if version1
1.回溯法算法思想: 定义: 回溯法(探索与回溯法)是一种选优搜索法,按选优条件向前搜索,以达到目标。但当探索到某一步时,发现原先选择并不优或达不到目标,就退回一步重新选择,这种走不通就退回再走的技术为回溯法,而满足回溯条件的某个状态的点称为“回溯点”。
Given an unsorted array, find the maximum difference between the successive elements in its sorted form.
迭代器是一种抽象的设计概念,现实程序语言中并没有直接对应于这个概念的实物。 1 迭代器设计思维——STL关键所在 不论是泛型思维或STL的实际运用,迭代器都扮演这重要的角色。STL的中心思想在于:将数据容器和算法分开,彼此独立设计,最后再以一贴胶着剂将它们撮合在一起。
STL定义有五个全局函数,作用于未初始化空间上,这样的功能对于容器的实现很有帮助。前两个函数是用于构造的construct()和用于析构的destroy(),另三个函数是uninitialized_copy(),uninitialized_fill(),uninitialized_fill_n,分别对应于高层次函数copy()、fill()、fill_n()——这些都是STL算法。
1 空间的配置和释放,std::alloc 对象构造前的空间配置和对象析构后的空间释放,由负责,SGI对此的设计哲学如下: 向system heap要求空间 考虑多线程状态 考虑内存不足时的应变措施 考虑过多“小型区块”可能造成的内存碎片问题 C++的内存配置基本操作是::operator new(),内存释放基本操作是::operator delete().这两个全局函数相当于C的malloc()和free()函数。
17.12 设计一个算法,找出数组中两数之和为指定值的所有整数对。 解答 时间复杂度O(n)的解法 我们可以用一个哈希表或数组或bitmap(后两者要求数组中的整数非负)来保存sum-x的值, 这样我们就只需要遍历数组两次即可找到和为指定值的整数对。
17.11 给定rand5(),实现一个方法rand7().也即,给定一个产生0到4(含)随机数的方法,编写一个产生0到6(含)随机数的方法。 解法: 这个函数要正确实现,则返回0到6之间的值,每个值的概率必须为1/7. 1 第一个尝试(调用次数固定) 第一个尝试时,我们可能会想产生出0到9之间的值,然后再除以7取余数。
17.9 设计一个方法,找出任意指定单词在一本书中的出现频率。 解法: 1 单次查询 遍历这本书的每个单词,计算给定单词出现的次数。时间复杂度O(n),我们无法继续优化它,因为书中的每个单次都需要访问一次。
17.8 给定一个整数数组(有正数和负数),找出总和最大的连续序列,并返回总和。 解法: 就是求连续子序列的和最大,不过存在一个问题: 假设整个数组都是负数,怎么样才是正确的行为呢?看看这个简单的数组{-3,-10,-5},一下答案每个都可以说的通: -3(假设子序列不能为空) 0(子序列的长度为空) INT_MIN(视为错误的情况) 我们会选择第二种(maxSum=0),但并没有所谓的“正确”答案。
17.7 给定一个整数,打印该整数的英文描述(例如“One Thousand,Two Hundred Thirty Four”)。 解法: 举个例子,在转换19 323 984时,我们可以考虑分段处理,没三位转换一次,并在适当的地方插入“thousand”(千)和“million”(百万)。
17.6 给定一个整数数组,编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n越小越好,也就是说,找出符合条件的最短序列。 解法: 开始解题之前,让我们先确认一下答案会是什么样的。
17.5 写一个函数来模拟游戏。 游戏规则如下: 4个槽,里面放4个球,球的颜色有4种,红(R ),黄(Y),绿(G),蓝(B)。比如, 给出一个排列RGGB,表示第一个槽放红色球,第二和第三个槽放绿色球,第四个槽放蓝色球。
17.4 编写一个方法,找出两个数字中最大的那一个。不得使用if-else或其他比较运算符。 解法: 我们可以通过一步步的分析来将需要用到的if-else和比较操作符去掉: If a > b, return a; else, return b.
17.3 写一个算法计算n的阶乘末尾0的个数? 解答: 首先,算出n的阶乘的结果再去计算末尾有多少个0这种方法是不可取的, 因为n的阶乘是一个非常大的数,分分种就会溢出。我们应当去分析, 是什么使n的阶乘结果末尾出现0。
17.2 设计一个算法,判断玩家是否赢了井字游戏。 解法: 假设这个检查某人是否赢得了井字游戏的函数为HasWon,那么我们第一步要向面试官确认, 这个函数是只调用一次,还是要多次频繁调用。如果是多次调用, 我们可以通过预处理来得到一个非常快速的版本。
17.1 编写一个函数,不用临时变量,直接交换两函数。 解法: 方法一:这个是经典面试题,也相当直接。我们将用a0表示a的初值,b0表示b的初始值,用diff表示a0-b0的值。 让我们将a>b的情形绘制在数轴上。
13.10 用C编写一个my2DALLoc函数,可分配二维数组。将malloc函数的调用次数降到最少,并确保可通过arr[i][j]访问该内存。 解法: 这道题目最简单的方法就是先开一个数组来存储指向每一行的指针, 然后再为每一行动态地分配空间。
13.9 编写支持对齐分配的malloc和free函数,分配内存时,malloc函数返回的地址必须都能被2的n次方整除。 解法: 一般来说,使用malloc,我们控制不了分配的内存会在堆里哪个位置。
13.8 编写一个智能指针类。智能指针是一种数据类型,一般用模板实现,模拟指针行为的同时还提供自动垃圾回收机制。它会自动记录SmartPointer对象的引用计数,一旦T类型对象的引用计数为零,就会释放该对象。
13.7 写一个函数,其中一个参数是指向Node结构的指针,返回传入数据结构的一份完全拷贝。 Node结构包含两个指针,指向另外两个Node。 C++实现代码: typedef map NodeMap; Node* copy_recursive(Node *cur, NodeMap &no...
13.6 基类的析构函数为何要声明为virtual? 解答: 用对象指针来调用一个函数,有以下两种情况: 如果是虚函数,会调用派生类中的版本。 如果是非虚函数,会调用指针所指类型的实现版本。 析构函数也会遵循以上两种情况,因为析构函数也是函数嘛,不要把它看得太特殊。
题目 C++中名字隐藏是什么? 解答 让我们通过一个例子来讲解C++中的名字隐藏。在C++中,如果一个类里有一个重载的方法, 你用另一个类去继承它并重写(覆盖)那个方法。你必须重写所有的重载方法, 否则未被重写的方法会因为名字相同而被隐藏,从而使它在派生类中不可见。
13.5 谈谈C语言关键字”volatile”的意义(或重要性)? 解答 关键字volatile的作用是指示编译器,即使代码不对变量做任何改动,该变量的值仍可能被外界修改。操作系统、硬件或其他线程都可能修改该变量。
13.4 深拷贝和浅拷贝有什么区别,如何使用? 解答 浅拷贝并不复制数据,只复制指向数据的指针,因此是多个指针指向同一份数据。 深拷贝会复制原始数据,每个指针指向一份独立的数据。通过下面的代码, 可以清楚地看出它们的区别: struct Test{ char *ptr; ...
13.3 C++中的虚函数是如何工作的? 解答 虚函数依赖虚函数表进行工作。如果一个类中,有函数被关键词virtual进行修饰, 那么一个虚函数表就会被构建起来保存这个类中虚函数的地址。同时, 编译器会为这个类添加一个隐藏指针指向虚函数表。
13.2 浅析哈希表和STL map。对比哈希表和STL map。哈希表是怎么实现的?如果输入数据规模不大, 我们可以使用什么数据结构来代替哈希表。 解答 对比哈希表和STL map 在哈希表中,实值的存储位置由其键值对应的哈希函数值决定。
13.1 用C++写个方法,打印输出文件的最后K行。 解答: 一种方法是打开文件两次,第一次计算文件的行数N,第二次打开文件,跳过N-K行, 然后开始输出。如果文件很大,这种方法的时间开销会非常大。
11.7 有个马戏团正在设计叠罗汉的表演节目,一个人要站在另一人的肩膀上。处于实际和美观的考虑,在上面的人要比下面的人矮一点、轻一点。已知马戏团每个人的高度和重量,请编写代码计算叠罗汉最多能叠几个人。 如果要保持相对顺序不变,那么不能直接排序。
11.6 给定M*N矩阵,每一行、每一列都按升序排序,请编写代码找出某元素。 类似leetcode:Search a 2D Matrix 但是与leetcode中这题不同的是下一行的第一个元素不一定大于上一行的最后一个元素。
11.5 有个排序后的字符串数组,其中散布着一些空字符串,编写一个方法,找出给定字符串的位置。 解法: 如果没有那些空字符串,就可以直接使用二分查找法。比较待查找字符串str和数组的中间元素,然后继续搜索下去。
11.4 设想你有一个20GB的文件,每一行一个字符串。请说明将如何对这个文件进行排序。 解法: 当面试官给出20GB大小的限制时,实际上在暗示些什么。就此题而言,这表明他们不希望你将数据全部载入内存。
11.3 给定一个排序后的数组,包含n个整数,但这个数组已被旋转很多次,次数不详。请编写代码找出数组中的某个元素。可以假定数组元素原先是按从小到大的顺序排序的。 解法: 可以直接从开始一个一个比较,也可以采用二分查找的方法。
11.2 编写一个方法,对字符串数组进行排序,将所有变位词1排在相邻的位置。 类似leetcode:Anagrams 解法: 变位词:由变换某个词或短语的字母顺序构成的新的词或短语。例如,“triangle”是“integral”的变位词。
11.1 给定两个排序后的数组A和B,其中A的末端有足够的缓冲空间容纳B。编写一个方法,将B合并入A并排序。 解法: 已知数组A末端有足够的缓冲,不需要再分配额外空间。程序的处理逻辑很简单,就是逐一比较A和B中的元素,并顺序插入数组,直至耗尽A和B中的所有元素。
9.11 给定一个布尔表达式,由0、1、&、|和^等符号组成,以及一个想要的布尔结果result,实现一个函数,算出有几种括号的放法可使该表达式得出result值。 解法: 跟其他递归问题一样,此题的关键在于找出问题与子问题之间的关系。
A peak element is an element that is greater than its neighbors. Given an input array where num[i] ≠ num[i+1], find a peak element and return its index.
9.10 给你一堆n个箱子,箱子宽w,高h,深d。箱子不能翻转,将箱子堆起来时,下面箱子的宽度、高度和深度必须大于上面的箱子。实现一个方法,搭出最高的一堆箱子,箱堆的高度为每个箱子高度的总和。 解法: 要解决此题,我们需要找到不同子问题之间的关系。