- 博客(19)
- 资源 (1)
- 收藏
- 关注
原创 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 3323
原创 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 973
原创 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 589
原创 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 551
原创 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 862
原创 Summary Ranges
该题算是一个细节实现题,比较简单,思路是定义两个索引分别定义为连续序列开始和结束的索引,循环找连续的段,进行处理直到全部序列都处理完为止。class Solution {public: vector summaryRanges(vector& nums) { int len = nums.size(); vector result; i
2015-07-12 21:04:21 468
原创 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 519
原创 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
原创 Android 输入管理服务启动过程的流程
接上一篇"Android窗口管理服务相关对象的创建流程",这两天分析了一下Android 输入管理服务启动过程的流程,流程图如下所示。
2015-07-12 00:14:53 1561
原创 Android窗口管理服务相关对象的创建流程
最近在分析Android的窗口管理服务,现在分析完了窗口管理服务相关的对象的创建过程,为了清晰的表示窗口管理服务相关对象的创建过程,就整个创建过程整理了流程图如下所示。 该图是基于 Android4.4 分析出来的,现在贴出来,希望能够帮到对输入管理服务(IMS)有兴趣的人。也希望和大家就输入管理服务交流。
2015-07-09 23:56:45 734
原创 Regular Expression Matching
题目要求这里不再赘述,有两点点需要注意:一、"*" 所代表的含义是代表其之前的字符的0个或多个重复。如 “a*” 代表 'a' 后面跟0个或者多个字符 'a';二、用 C++ 实现的话后面函数的入参是 string 型,在这里按字符处理的时候有诸多不便,可以转换为 char * 进行处理。class Solution {public: bool isM
2015-07-09 23:52:45 492
WifiDisplay总结报告
2015-03-03
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人