自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (1)
  • 收藏
  • 关注

转载 告诉你Hadoop是什么

转自:http://os.51cto.com/art/201207/346023.htm这是我看到的一篇对hadoop整体介绍比较好的博客,转过来自己学习,也希望帮到入门级hadoop学习者。Hadoop是什么?Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算.

2015-12-30 22:12:14 509

原创 Longest Increasing Subsequence

问题:Given an unsorted array of integers, find the length of longest increasing subsequence.For example,Given [10, 9, 2, 5, 3, 7, 101, 18],The longest increasing subsequence is [2, 3, 7, 101],

2015-11-03 15:07:33 541

原创 求二叉树中和为特定值的路径

求一棵二叉树中和为特定值的路径,可以用深搜的思路来解决,由于二叉树中各个节点的值没有特定的大小规律,所以没有可行的剪枝策略。具体的代码如下所示:

2015-10-18 16:09:41 580

转载 c++类static成员

转自:http://blog.csdn.net/heyabo/article/details/8681516由题目,这里只讨论类中的static作用(类的静态成员),即两点:static数据成员 和 static成员函数。静态成员的提出:为了解决数据共享问题。当然全局对象也可以实现数据共享,但相比,static有以下两个优点:(1)封装性:static成员可

2015-10-13 21:58:42 490

原创 然而沼跃鱼早就看穿了一切

问题:描述fjxmlhx每天都在被沼跃鱼刷屏,因此他急切的找到了你希望你写一个程序屏蔽所有句子中的沼跃鱼(“marshtomp”,不区分大小写)。为了使句子不缺少成分,统一换成 “fjxmlhx” 。输入输入包括多行。每行是一个字符串,长度不超过200。一行的末尾与下一行的开头没有关系。输出输出包含多行,为输入按照描述中变换的结果。

2015-09-14 11:46:59 725

原创 补提交卡

问题:描述小Ho给自己定了一个宏伟的目标:连续100天每天坚持在hihoCoder上提交一个程序。100天过去了,小Ho查看自己的提交记录发现有N天因为贪玩忘记提交了。于是小Ho软磨硬泡、强忍着小Hi鄙视的眼神从小Hi那里要来M张"补提交卡"。每张"补提交卡"都可以补回一天的提交,将原本没有提交程序的一天变成有提交程序的一天。小Ho想知道通过利用这M张补提交卡,可以使自己的"最长连

2015-09-14 10:40:14 579

原创 大数相乘的实现

一般所说的大数即超出了系统所支持的最大类型的整形的表示范围,对于这种大的数不能用整形类型来表示,只能通过string 类型来表示。对于两个用string 类型来表示的大数,其乘法实现按两个数相乘的一般法则来实现。返回类型也用string 类型来表示。//两个string 进行相加(按各位字符所对应的整数值)string execadd(string s1, string s2){ int

2015-09-08 17:19:00 556

原创 最长连续序列

问题:        给定一个未排序的整数数组,找出最长连续序列的长度。解题思路:        该题初始的思路是排序,但是题目有O(n)时间复杂度的要求,所以不能进行排序。可以用空间换时间来解决,也即首先对所有元素进行 hash,这样查找某个元素的时间复杂度就为O(1),然后在求包含待查元素的连续序列的长度的时候只需查找其左右元素是否在hash 表中即可。为了避免元素的重复查找,创建

2015-09-06 11:21:19 601

原创 带最小值操作的栈

问题:实现一个带有取最小值min方法的栈,min方法将返回当前栈中的最小值。你实现的栈将支持push,pop 和min 操作,所有操作要求都在O(1)时间内完成。解法:该题的解法是设置一个用于存储当前最小元素的辅助栈。class MinStack {public: MinStack() { // do initialization if neces

2015-09-06 09:50:35 1169 1

原创 编辑距离

问题:给出两个单词word1和word2,计算出将word1 转换为word2的最少操作次数。    你总共三种操作方法:        插入一个字符        删除一个字符        替换一个字符解题思路:        典型的动态规划问题,用 dp[i][j] 表示 word1 和 word2 中以 i,j 结尾的子串的编辑距离, 如果 word1[i] =

2015-09-05 20:22:02 501

原创 乘积最大子序列

问题:        找出一个序列中乘积最大的连续子序列(至少包含一个数)。解题思路:        该题是典型的动态规划问题,考虑到序列中存在负数的情况,需要定义两个辅助数组,一个存储以当前元素结尾的最大乘积,一个记录以当前元素结尾的最小乘积。int maxProduct(vector& nums) { // write your code here

2015-09-05 19:47:50 494

原创 数字三角形

问题:        给定一个数字三角形,找到从顶部到底部的最小路径和。每一步可以移动到下面一行的相邻数字上。解题思路:        该题是一道典型的动态规划的题目,到 i 行, j 列元素的最小的路径为 f[i][j],则f[i][j] = min(f[i - 1][j - 1], f[i - 1][j]) + d[i][j],其中 d[i][j]为 i 行,j 列元素的值。i

2015-09-05 19:28:31 442

原创 带重复元素的排列

问题:       给出一个具有重复数字的列表,找出列表所有不同的排列。解题思路:       这里求全排列用的方法是每一位依次与其之后的各个位替换,递归实现。为了避免有重复元素导致的元素重复的问题,只需满足在每一位替换的元素值不发生重复即可。 void execFind(vector> &result, vector cur, vector &nums, int inde

2015-09-02 17:13:45 1304

原创 组合(二)

问题:        给定一个含不同整数的集合,返回其所有的子集思路:       在组合(一)分析的基础上,这个问题只是求包含不同元素数量的子集合而已。//递归执行具体的查找工作 void execFind(vector> &result, vector nums, vector cur, int leftnum, int index){ if(

2015-09-02 16:12:22 424

原创 组合(一)

问题:        给出两个整数n和k,返回从1......n中选出的k个数的组合。解题思路:        该题是一个典型的深搜问题,解题思路是找 k 个数可以看成取 i 位置的元素(i 从 1 到 n - (k - 1)),然后在剩余的 i + 1 ~ n 之间取 k - 1 个数。递归实现取 k - 1 个元素的思路。void execFind(vector> &resul

2015-09-02 16:04:19 544

原创 数字组合

题目:        给出一组候选数字(C)和目标数字(T),找到C中所有的组合,使找出的数字和为T。C中的数字可以无限制重复被选取。        例如,给出候选数组[2,3,6,7]和目标数字7,所求的解为:[7],[2,2,3]解法:        该题为典型的深搜类型的题目,代码如下   void execFind(vector> &result, vect

2015-09-02 13:50:22 688

原创 二叉树的序列化和反序列化

该题首先用先序遍历的思路把树转换(序列化)为字符串,这样在恢复的时候就可以根据字符串先序遍历的特点进行恢复(反序列化)。 string int2str(int intsrc){ stringstream ss; ss << intsrc; return ss.str(); }//序列化代码,先序遍历的顺序进行序列化

2015-09-01 20:56:28 623

原创 删除二叉查找树的节点

想对于二叉查找树的查找、插入等操作来说,二叉查找树的删除操作是比较复杂的。在具体的分析中可以根据待删除节点的:1、左右子树均为空;2、左右子树中有一个为空;3、左右子树均非空的情况来考虑。       其中第3种情况即左右子树均非空的情况较为复杂,删除过程中可以找待删除节点的后继节点,与待删除节点交换,然后把后继节点的右子树接入到待删除节点的父节点即可。 TreeNode* r

2015-09-01 11:06:18 1081

原创 前序遍历和中序遍历树构造二叉树

该问题用递归的思路很好解决,每一次取前序序列的首元素作为当前子树的根节点,然后在中序序列中找到对应的节点,以此可以确定根节点对应的左子树和右子树的序列长度,递归构造根节点的左子树和右子树即可。TreeNode *execBuild(vector &preorder, int prestart, int preend, vector &inorder, int instart, int inen

2015-08-31 17:06:46 885

原创 链表排序

可以用对数组进行排序的方法对链表进行排序,但由于链表有单向访问的特点所以用归并排序比较合理。 ListNode *Merge(ListNode *pre1, ListNode *pre2){ ListNode *fir = pre1 -> next; ListNode *sec = pre2 -> next; ListNode *resu

2015-08-31 09:40:02 655 1

原创 下一个排列

该题的思路是从后向前扫描数组,找到第一对位置 i,j (i vector nextPermutation(vector &nums) { // write your code here int size = nums.size(); //标记数组是否为递减数组 bool flag = false;//找出从后向前第一个不递

2015-08-30 10:54:13 717

原创 更新二进制位

该题的思路是首先把 int 对应的二进制形式转为 string(主要是 int 难以操作具体的位,转换为 string 形之后操作具体的位就简单多了)然后把 string 再转回 int 返回即可。 int updateBits(int n, int m, int i, int j) { // write your code here string sn, sm

2015-08-29 21:11:02 780

原创 Kth Largest Element in an Array

该题最直观的解决思路是先对数组进行排序,然后返回第k个元素即可,但是该方法的时间复杂度为 O(nlog(n)), 较高。比较高校的思路有两种:一种是堆排序的思路,一种是快拍的思路。        一、堆排序的思路。该思路设置容量为 k 的大顶堆,将剩余的元素每一个和堆顶元素进行比较,若比堆顶元素大则该元素必然不会是第 k 大的元素,直接处理下一个元素;若比

2015-08-29 15:30:29 770

原创 Binary Tree Paths

        该题采用深搜就可以做了(其实树的很多问题用深搜的思路都可以解决的),从根节点开始记录路径上的每一个节点,每到一个叶子节点把路径放入结果vector中就可以了。/** * Definition for a binary tree node. * struct TreeNode { * int val; * TreeNode *left; *

2015-08-29 12:06:59 830 2

原创 Maximum Subarray Difference

该题的思路是使用辅助数组来保存从前向后和从后向前到当前位置的最大最小值,这样就可以通过每一个位置处的最大最小值来计算该位置的结果,最后在所有结果中选出最大的值即可。 int maxDiffSubArrays(vector nums) { // write your code here int size = nums.size(); /

2015-07-31 17:26:34 868

原创 nexus7刷机流程

成功nexus7刷机步骤:1、在驱动网站:https://developers.google.com/android/nexus/drivers#flokot49h 上下载相关驱动(根据设备版本),现在用的是:“Android 4.4.2 (KOT49H)”;2、按“http://blog.csdn.net/june5253/article/details/8560557”给的

2015-07-21 11:33:28 3326

原创 Lowest Common Ancestor of a Binary Tree

做到这个题才发现之前做的关于二叉检索树的写复杂了,其实可以直接根据二叉检索树的特点进行判断(从树根开始,某一节点的值大于待搜的两个节点则在左边找,小于待搜的两个节点则在右边找,否则返回该节点即可)。这道题倒是必须用DFS来解决。class Solution {public: //DFS代码 void findNode(TreeNode* root, TreeNode* toF

2015-07-18 22:08:17 520

原创 Delete Node in a Linked List

该题的难点在于单链表没法删除节点,那么就只能将该节点后续所有节点的值前移覆盖当前节点的值。需要注意的是在移动到倒数第二个节点的时候在覆盖其值之后需要将其下一个节点指向 nullptr。class Solution {public: void deleteNode(ListNode* node) { if(node == nullptr) retur

2015-07-18 16:53:52 626

原创 Android 输入管理服务-输入事件向具体应用的分发

输入管理服务接收到输入事件,对输入事件进行处理之后会把输入事件分发到具体的应用中(如WMS、壁纸服务等)去处理的,这里涉及到了JNI从C++层向JAVA层的调用。具体流程如下图所示:

2015-07-16 09:01:21 974

原创 Rectangle Area

该题比较简单,首先求重叠区域的面积,让后从总面积减去重叠区域的面积。class Solution {public: int computeArea(int A, int B, int C, int D, int E, int F, int G, int H) { int M = A > E ? A : E; int N = B > F ? B : F;

2015-07-14 13:14:05 760

原创 Invert Binary Tree

该题比较简单,递归交换每一个节点的左右子树即可。class Solution {public: TreeNode* invertTree(TreeNode* root) { if(root == NULL) return NULL; TreeNode* tmp = root -> left; root -> le

2015-07-14 13:07:23 590

原创 Basic Calculator II

该题和前面的"Basic Calculator"的处理方法一样,只是加入了对"*"、"/"两种运算的支持。class Solution {public: bool isnum(char c){ if(c >= '0' && c <= '9') return true; return false; }

2015-07-14 13:02:04 552

原创 Basic Calculator

该题的思路很明确就是将中缀表达式转换为后缀表达式,然后通过后缀表达式来求值。class Solution {public: int calculate(string s) { vector postorder; stack ccache; stack icache; string tmp;

2015-07-14 12:56:56 677

原创 Android 输入管理服务-输入事件到达之后的处理流程

接上一篇博客“Android 输入管理服务启动过程的流程”,这两天分析了Android 输入管理服务接收到输入事件之后的处理流程,具体流程如以下两图所示:接下图

2015-07-13 22:41:32 863

原创 Summary Ranges

该题算是一个细节实现题,比较简单,思路是定义两个索引分别定义为连续序列开始和结束的索引,循环找连续的段,进行处理直到全部序列都处理完为止。class Solution {public: vector summaryRanges(vector& nums) { int len = nums.size(); vector result; i

2015-07-12 21:04:21 469

原创 Kth Smallest Element in a BST

该题的思路很简单,就是对BST进行先序遍历,找到第k个数的时候返回。这里借助栈用迭代实现,递归的代码更简单,没有尝试。class Solution {public: int kthSmallest(TreeNode* root, int k) { stack cache; TreeNode *point = root; TreeNode

2015-07-12 16:30:36 654

原创 Palindrome Linked List

该题目的要求是判断一个单链表是否是回文链表,题目的难度在于O(n)时间和O(1)空间的限制。由于单链表不能反向访问,所以不能直接通过原来的链表来判断,解题的思路是首先对原来的链表的前半部分进行判断,然后进行判断(如链表为“12344321” 反转之后为“43214321”)。想到这一点之后的实现就非常简单了,完整的代码如下所示:class Solution {public: Li

2015-07-12 16:26:36 775

原创 Power of Two

该题最简单的办法是迭代除2直到不能再除,看余数是否为1,更好的办法暂时没有想到。class Solution {public: bool isPowerOfTwo(int n) { if(n < 1) return false; while(n > 1){ if(n % 2 == 1)

2015-07-12 10:19:59 520

原创 Implement Queue using Stacks

该题算是比较简单的,思路是定义两个栈,一个做为入栈,一个做为出栈。入队列的话直接将元素压入入栈,出队列的话首先判断出栈是否为空,为空则将入栈中的元素依次压入出栈中,再从出栈弹出元素。class Queue {public: // Push element x to the back of queue. void push(int x) { instack.pu

2015-07-12 10:03:49 556

原创 Lowest Common Ancestor of a Binary Search Tree

题目很好理解,即求一棵二叉树中两个节点的公共祖先。我的解题思路是使用DFS,求出从根节点到两个待查节点各自的路径,然后从头开始比较两个路径,最后一个相等的节点即为公共祖先节点。完整代码如下。class Solution {public://DFS代码 void findNode(TreeNode* root, TreeNode* toFind, vector &curPath

2015-07-12 01:04:16 508

WifiDisplay总结报告

基于Android源码对Android WifiDisplay技术的详细介绍,包括:加入WifiDisplay之后Android的显示系统的工作流程,SurfaceFlinger与WifiDisplay相关介绍,以及android源码中Source端和Sink端代码的实现介绍

2015-03-03

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除