曾任职于阿里巴巴,现就职于美图,专业搬砖100年~
暂时未有相关通用技术能力~
阿里云技能认证
详细说明题目链接: Max Points On a Line 题目意思: 在二维平面上,有n个点,求同一条直线上最多点的个数 题目分析: 1. O(n^2)直接暴力求每个点所在所有直线的最大值,利用map来映射 2.
本文转载自: 转正出处 第一种情况:改动没有被提交(commit) 这种情况下,使用svn revert就能取消之前的修改。 svn revert用法如下: svn revert [-R] something 其中something可以是(目录或文件的)相对路径也可以是绝对路径。
题目链接: Evaluate Reverse Polish Notation 题目意思: 给的一个表达式,求值 代码: class Solution { public: bool IsOperator(const string &s...
题目链接: Reverse Words in s String 题目意思: 给定一个字符串,要求把字符串中的"单词"反转 1.
题目链接 题目意思: 给定一个数组,求最大连续子序列的乘积 分析: 简单dp。maxDp[i]表示以num[i]结尾的最大子序列乘积,minDp[i]类似 maxDp[i] = max{num[i], maxDp[i-1]*num[i], minDp[i-1]*num[i]} minDp[i] = min{num[i], minDp[i-1]*num[i], maxDp[i-1]*num[i]} 之所以要minDp,是因为有负数的存在,导致多了一个状态。
题目链接: Find Minimun in Rotated Sorted Array 题目意思: 给定一个旋转数组,找出这个旋转数组的最小元素。旋转数组的定义是,把一个从小到大排好序的数组,取一部份放到末尾,例如0 1 2 4 5 6 7 取 0 ...
一个简单的C++程序,Test函数用来测试调用Linux的系统命令ls -l #include #include #include #include #include #include using namespace std; const i...
文章转载自: http://blog.csdn.net/v_july_v/article/details/670407 从hadoop框架与MapReduce模式中谈海量数据处理 前言 几周前,当我最初听到,以致后来初次接触Hadoop与MapReduce这两个东西,我便稍显兴奋,觉得它们很是神秘,而神秘的东西常能勾起我的兴趣,在看过介绍它们的文章或论文之后,觉得Hadoop是一项富有趣味和挑战性的技术,且它还牵扯到了一个我更加感兴趣的话题:海量数据处理。
下面针对的是非ubuntu环境,会在文章末尾介绍ubuntu的一些区别。 在Linux下,经常需要定期的执行一些脚本从而来实现一些功能。
一. 创建新仓库 创建文件夹,打开,然后执行 git init 以创建一个空仓库 二. 检出仓库 执行以下命令以创建一个本地仓库的克隆版本 git clone /path/to/repository 如果是克隆远程仓库,则执行以下命令 git clone username@host:/path/to/repository 三. Git的工作流 你的本地仓库由 git 维护的三棵“树”组成。
转载自:http://www.infoq.com/cn/news/2011/03/git-adventures-branch-merge 分支与合并 在Git里面我们可以创建不同的分支,来进行调试、发布、维护等不同工作,而互不干扰。
转载自:http://www.infoq.com/cn/news/2011/03/git-adventures-index-commit 我想如果看过《Git历险记》的前面三篇文章的朋友可能已经知道怎么用git add,git commit这两个命令了;知道它们一个是把文件暂存到索引中为下一次提交做准备,一个创建新的提交(commit)。
转载自:http://www.infoq.com/cn/news/2011/02/git-adventures-local-repository 如果我们要把一个项目加入到Git的版本管理中,可以在项目所在的目录用git init命令建立一个空的本地仓库,然后再用git add命令把它们都加入到Git本地仓库的暂存区(stage or index)中,最后再用git commit命令提交到本地仓库里。
转载自:http://www.infoq.com/cn/news/2011/01/git-adventures-install-config 各位同学,上回Git历险记(一)讲了一个 “hello Git” 的小故事。
转载自:http://www.infoq.com/cn/news/2011/01/git-adventures-1 【编者按】作为分布式版本控制系统的重要代表——Git已经为越来越多的人所认识,它相对于我们熟悉的CVS、SVN甚至同时分布式控制系统的Mercurial,有哪些优势和不足呢。
题目:输入两个二叉树A和B的根节点,判断二叉树B是否为A的子结构 分析: 1. 两个二叉树如下所示 A树 B树 2. 要查找树A中是否包含数B一样的子结构,我们可以分成两步。
转载自:http://www.apkbus.com/portal.php?mod=view&aid=9839 算法一:快速排序算法 快速排序是由东尼·霍尔所发展的一种排序算法。
题目: 输入两个递增排序的链表,要求把两个链表和并成一个链表并且使得新链表也是递增排序的。 分析: 1. 假设两个链表如下所示 2. 要合并两个链表,可以利用归并排序的合并思想,从头枚举两个链表,判断两个指针指向的两个结点的值关系。
题目:输入一个单向链表(只有指向下一个结点指针),输出链表中的倒数第k个结点。 分析: 1. 一个单向链表只有指向下一个结点的指针,所以我们无法得到前面一个结点的指针,所以不能通过最朴素的枚举法来求出。
一. list介绍 1. 相对于vector是连续的线性空间,list是一个不连续的存储空间。每次在list中插入或删除一个元素,就配置一个或释放一个元素空间,因此list对于空间的使用有绝对的精准,一点都不会浪费的。
题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序使得所有奇数位于前面半部分,偶数位于后半部分。 分析: 1. 方案一:最朴素做法是枚举数组,发现一个奇数就把数字放到前面,然后移到后面的数字。
一. awk工具介绍 1. 相比sed用来处理一行数据,awk比较倾向将一行分成几个“字段”来处理。 2. awk命令的格式 awk 'BEGIN{} {} END{}' filename (1)awk可以处理文件也可以读取来自前...
一. sed介绍 1. sed是一个很好的文本处理工具,本身也是一个管道命令。sed可以接收标准输入,主要是以行为单位,能够对数据进行替换,删除,新增,选取特定行等功能。
一. inode详解 1. Linux下每个文件都有唯一个inode,每个inode都有一个唯一的编号。inode用来记录了文件的相关属性,主要包括以下信息 (1)文件的权限 (2)文件的所属组和所属用户 (3)文件的大小 (4)文件的创建或改变的时间 (5)文件最近一次读取的时间 (6)文件最近修改的时间 (7)文件的block位置 2. 一般来说inode保存了除了文件名之外的所有信息,因为Linux识别一个文件不是通过文件名而是通过inode。
题目:给定一个单向链表(只有指向下一个结点的指针)的头结点和某一个结点的指针,求怎样在O(1)的时间删除这个给定结点。 分析: 1. 最朴素的算法是从头结点开始搜索到给定结点前一个结点,然后把结点删除。
题目:给定一个函数原型Power(double base, int exponent),要求实现该函数,并且不能使用库函数也不用考虑大数问题。 分析: 1. 最简单的实现Power函数是直接利用for循环,这样时间复杂度为O(n)。
题目:把一个递增数组的前几个元素移动到数组的末尾,我们称之为数组的旋转。输入一个递增排序数组的旋转,输出旋转数组的最小元素。例如输入3 4 5 6 7 1 2,则最小元素为1。
一. vector概述 1. vector的数据安排以及操作方式与数组非常的相似。数组是静态空间,一旦配置了就无法改变其大小。但是vector是动态的,随着元素的加入它的内部机制会自动扩充空间以容纳新元素,所以不用担心vector的空间问题。
题目:利用归并排序求解一个数组中的逆序数对 分析: 1. 什么是逆序数对,例如给定数组{7, 5, 6, 4},对于每个数num,如果num之前有多少个数大于num则说明num这个数构成逆序数对有多少个 7有0个,5有1个,6有1个,4有三个,因此数组中总的逆序数对为5。
题目:给定两个链表的头结点,求两个链表的公共长度。 分析: 1. 两个链表无非就两种关系(其它特殊关系都可以看成是这两种的特殊关系) (1)不相交: (2)相交: 2. 对于第一种情况,两个链表不相交则公共长度为0。
一. STL六大组件介绍 1. 容器 STL容器包含两种:序列式容器主要有vector、list、deque,以及关联式容器主要有set、map、multiset、multimap。
题目:给定一个二叉树要求打印出所有从根结点到叶子结点路径和为value的路径 例如,给定二叉树如下要求打印出所有和为9的路径,有1->6->3->-1和1->7->4->-3 分析: 1.
1. 最简单的实现快速排序的方法是利用递归来实现,如果要利用非递归的方法实现 2. 非递归的实现快速排序,可以利用栈来实现。其实递归的本质就是栈的先进后出的性质。
题目:给定一个无序序列和一个数k,求最小k个数(不要求数字有序) 分析: 方案一:最朴素的方法是利用快速排序,然后直接输出最小k个数,时间复杂度为O(nlogn) 方案二:利用快速排序的partition函数的性质,根据基准的性质,每次可以把序列分成两个部分,左边序列全部小于等于基准的值,右边序列全部大于等于序列的值。
题目:给定一个无序序列和一个数k,求这个无序序列中第K大的数 分析: 方案一:最朴素的方法利用快速排序然后找到第k个数,时间复杂度O(nlogn) 方案二:根据快速排序中的partition方法,每次可以把一个序列分成两个部分,左边全部小于等于基准,右边的全部大于等于基准。
题目:给定一个单链表的头结点要求反转该链表并要求不能改变更改链表的结构 分析: 1. 假设一个链表如下 headNode -> node1 -> node2 -> node3 -> node4 -> NULL 2.
参考高爽的博客http://hi.baidu.com/gsgaoshuang/item/17a8ed3c24d9b1ba134b14c2 1. 希尔排序又称为缩小增量排序,属于插入排序算法的改进。
题目:设计一个栈类型,使得在该栈类型中有一个函数min可以得到栈的最小元素,要求这个栈的push、pop、min都是O(1)。 分析: 1. 栈的性质是先进后出,因此一般情况下栈的push、pop的时间是O(1),但是要求栈的min必须要枚举整个栈,时间复杂度为O(n) 2.
一. 冒泡排序 1. 思想:利用比较相邻的两个元素,发现两个数前者大于后者则进行交换,这样每一轮可以把最大数放到后面,只要做n轮便可以使得序列有序。 2.
一. 设置虚函数需要考虑五个方面 1. 只有类的成员函数才能声明为虚函数 2. 类的静态成员函数不能为虚函数,因为调用静态成员函数不需要实例只需要用类名即可。
一. 什么是虚函数 1. 虚函数是面向对象编程中函数的一种特定形态,是C++中用于实现多态的一种有效机制 2. 虚函数用virtual修饰函数名,虚函数的作用是在程序的运行阶段动态的选择合适的成员函数,在定义了虚函数之后,可以在基类的派生类中对虚函数进行重定义,在派生类中重定义的函数与基类虚函数具有相同的函数返回值、函数参数列表、函数名等。
1. 求某个目录下普通文件的个数 #!/bin/bash path=/home/chenguolin count=0 for file in $(ls $path) do if [ -f $file ] then let count++ fi done echo "count = $count" exit 0 2.
一. 二叉树的结点表示 struct BinaryTreeNode{ int value; BinaryTreeNode *lson; BinaryTreeNode *rson; }; 二.
题目:用两个栈实现一个队列,队列的声明如下 //队列声明如下 template class Queue{ public: Queue(void){} ~Queue(void){}; void push(const T& value); ...
题目:输入某个二叉树的前序遍历和中序遍历的结果,重建二叉树。假设输入的两个序列中都是没有重复数字的,例如输入前序序列{1,2,4,7,3,5,6,8},中序序列{4,7,2,1,5,3,8,6} 分析: 1. 在二叉树的前序序列中,第一个数总是二叉树的根结点的值。
题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值 方案一:通常遍历链表是从头开始一个一个的遍历,所以如果要反过来打印链表,可以借助栈来实现 方案二:栈实现的方法就是递归,所以也可以用来递归来实现 //链表的结点 struct Li...
一. strcpy函数 1. strcpy的原型是char* strcpy(char *des, const char *src); 返回des指针。
局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。要使用全局变量,需要使用::。在函数体内引用变量会用到同名的局部变量而不是全局变量,对于一些编译器来说,在同一个函数体内可以定义多个同名的局部变量。
题目:实现一个函数,把字符串中的每个空格替换成"%20",例如输入"we are happy.",则替换后输出"we%20are%20happy." 方案一:朴素做法是枚举字符串,每次找到一个字符串把当前空格后面的字符串往后移动2个,再把%20插入。
题目:在一个二维数组中,每一行都按照从从左到右递增的顺序排序,每一列按照从上到下的顺序递增排序。输入一个这样的二维数组arrNum和一个整数value,判断二维数组是否含有该整数 方案一:最朴素的方法枚举整个数组,时间复杂度O(n^2),效率太低 方案二:观察这个数组的特点就是每行每列都是递增的顺序。