- 博客(193)
- 资源 (8)
- 收藏
- 关注
原创 2020-09-02
二分查找那些坑1. 二分搜索:寻找一个数如下两种实现方式,right 边界的取值,直接影响着算法的实现细节,这些细节稍不小心就会犯错。二分查找看似简单,实则不然,真正能考虑到所有细节,把代码写准确是很不容易的。int binarySearch(int[] nums, int target) { int left = 0; int right = nums.length - 1; // 注意,搜索区间是[left, right],左闭右闭 while(left <
2020-09-02 17:27:17 269
原创 Android 如何引用库工程Library的资源
一、假如工程A引用Library工程B,如何在A中直接引用B的资源呢?方法一:直接将工程B的资源拷贝到工程A中方法二:在工程A的java 代码中引用B的资源R,注意R需要带上包名。例如:imageView.setImage(com.B.pkgname.R.drawable.image);方式三:在工程A的layout.xml文件中引用B的资源。<ImageView and
2017-03-08 17:41:37 5879
原创 经典算法: 输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数
题目:输入一个整数n,求从1到n这n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1 的数字有1,10,11和12,1一共出现了5次。假如需要求的N=23106,那么计算过程如下:万位=1:1 0000--1 9999 共计10000个千位=1: 0 1 000--2 1 999 共计3*1000 = 3000,其中3表示万位可以填
2017-01-07 18:35:59 5195 1
原创 动态规划:求最长公共子序列问题
最长公共子序列问题:子序列是指在原序列中删去若干元素(这些元素可以不相邻)后得到的序列。例如X=abcbdab,Y=bdcaba,bca和bcba都是X和Y的公共子序列,且后者是最长的公共子序列。给定两个序列X(m)={x[1],x[2],...x[m]}和Y(n)={y[1],y[2],y[n]},如何找出它们的一个最长公共子序列Z(k)={z[1],...,z[k]}。动态规划算法求
2017-01-07 17:59:19 2214
原创 Android 线程池框架、Executor、ThreadPoolExecutor详解
一、Java线程池Java通过Executors提供四种线程池,分别为:newCachedThreadPool 创建一个可缓存线程池,线程池的最大长度无限制,但如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。newFixedThreadPool 创建一个定长线程池,可控制线程最大并发数,超出的线程会在队列中等待。newScheduledThreadPool
2016-12-30 12:26:48 11226 1
原创 动态规划:如何求解最大连通节点值
题目有N个小球,上面有数字,分别对应1……N,每个小球有个价值,第i个小球价值对应Value[i];有N-1个木棍,一个木棍两端分别连接着一个小球,把N个小球连接起来,并且保证任意两个小球间都不存在两条不同的路径可以互相到达。现在要把1号小球连通的M个刷上油漆(连通指的是这一些涂漆的小球可以互相到达并且不会经过没有涂漆的小球),要求使这M个小球的值得和最大。输入每个
2016-12-29 21:26:25 1147
原创 递归调用:汉诺塔
题目:编程解决汉诺塔问题,使用数据结构栈(偷个懒,如果不知道汉诺塔是什么,请自行Google)解答一:递归调用汉诺塔是个非常经典的问题,讲递归时应该都会讲到它。如果我们没有递归的先验知识, 直接去解答这道题,常常会觉得不知道如何下手。用递归却可以非常优美地解决这个问题。使用递归的一个关键就是,我们先定义一个函数,不用急着去实现它, 但要明确它的功能。对于汉诺塔问题,我们定义如下函数原型
2016-12-29 10:25:11 1963
原创 经典算法:寻找最近公共祖先
题目假设现在他知道了N个人的信息——他们的父亲是谁。给出两个人的名字,找出这两个人是否存在同一个祖先,如果存在,那么他们的所有共同祖先中辈分最低的一个是谁?输入输出每个测试点(输入文件)有且仅有一组测试数据。每组测试数据的第1行为一个整数N,意义如前文所述。每组测试数据的第2~N+1行,每行分别描述一对父子关系,其中第i+1行为两个由大小写字母组成的字符串F
2016-12-28 20:14:08 7447
原创 动态规划:求解最长递增子序列(LIS)
题目1:一个序列有N个数A[1],A[2],…,A[N],求出最长非降子序列的长度。 (DP经典问题LIS:longest increasing subsequence)注意:此处的子序列不一定是连续的,这跟最大连续子序列求和不一样!分析:我们定义d(i),表示前i个数中以A[i]结尾的最长非降子序列的长度,则动态规划转移方程为:d(i) = max{1, d(j)+1},其中
2016-12-25 23:28:44 1882
原创 树中的最长路径
题目N个结点,用(N-1)个线段连接起来,组成一棵树。这棵树中距离最远的两个结点之间相隔的距离。注意:是任意两个结点的最远距离,不是树的深度。解法这个题目很像二叉树中,求距离最远的两个结点的距离。在求解时,递归求解每个结点的最大深度,假设左子树深度为L,右子树深度为R,那么经过这个结点的,且以这个结点为根节点的子树中,最远两个结点的距离为L+R。且其父节点的左子
2016-12-25 16:06:18 7299 1
原创 约瑟夫环问题:圆桌报数问题
约瑟夫环问题:一圈共有N个人,开始报数,报到M的人自杀,然后重新开始报数,问最后自杀的人是谁?如图:内环表示人排列的环,外环表示自杀顺序;上面N=41,M=3。最普通办法就是模拟整个过程:建一个bool数组,true表示此人还活着,false表示已经自杀。可以模拟整个过程[cpp] view plain copy
2016-12-24 23:43:08 5664
原创 找完全二叉树最底层最右边的结点
题目:用log(n)算法 找完全二叉树最底层最右边的结点一颗二叉树的总结点其实是知道的,设为N。如上图,总共有15个结点,那么找15号结点只需从根结点开始,向右--向右--向右。假设只有14个点,那么向右--向右--向左假设只有13个结点,那么向右---向左---向右…………可以找到规律,总结点数即为最后一个结点,也就是我们要找的
2016-12-24 20:04:56 2376
原创 二进制智力题
1、现有1000个苹果,10个盒子,现在要你将1000个苹果装入10个盒子中,使得用户无论购买多少个苹果(1-1000),都能由若干个盒子拼装而成(卖的时候是整个盒子卖,不能拆盒子的包装)解法:考虑1, 2, 4, 8这四个数,由这四个数可以组成1-15之间任意一个数,也即1,2, 4 ... 2n 可以组成1-2(n+1)-1之间所有的数。所以这十个盒子分别放入1, 2, 4,
2016-12-24 20:02:52 1849
原创 动态规划:最长回文字符串
题目:请从一个已知的字符串中寻找最长回文字符串解法1:动态规划回文字符串的子串也是回文,比如P[i,j](表示以i开始以j结束的子串)是回文字符串,那么P[i+1,j-1]也是回文字符串。这样最长回文子串就能分解成一系列子问题了。这样需要额外的空间O(N^2),算法复杂度也是O(N^2)。 状态方程和转移方程: P[i, j] =
2016-12-24 19:47:30 12892 6
转载 Android应用程序进程启动过程的源代码分析
转自:老罗的Android之旅 http://blog.csdn.net/luoshengyang/article/details/6747696Android应用程序框架层创建的应用程序进程具有两个特点,一是进程的入口函数是ActivityThread.main,二是进程天然支持Binder进程间通信机制;这两个特点都是在进程的初始化过程中实现的,本文将详细分析Android应用程序进程
2016-12-15 14:30:44 747
原创 深入理解面向切面的编程AOP、AspectJ、Spring
Spring:是一个开源框架,Spring是于2003 年兴起的一个轻量级的Java 开发框架。Spring提供的AOP功能,方便进行面向切面的编程,许多不容易用传统OOP实现的功能可以通过AOP轻松应付。AspectJ:是一个面向切面的框架,它扩展了Java语言。AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件.一、AOP介
2016-12-07 13:59:40 3661
原创 Java IO流操作汇总: inputStream 和 outputStream
我们在进行Android java 开发的时候,经常会遇到各种IO流操作。IO流操作一般分为两类:字符流和字节流。以“Reader”结尾都是字符流,操作的都是字符型的数据;以“Stream”结尾的都是字节流,操作的都是byte数据。现将各种常见IO流总结如下:一、字节流1.inputStream 和 outputStreaminputStream 和 outputStream为各种输
2016-12-06 14:35:04 68255 5
原创 ART环境对Android热修复方案的影响分析
一、ART(Android Runtime)ART是Android在4.4版本中引入的新虚拟机环境,在5.0版本正式取代了Dalvik VM。ART环境下,App安装时其包含的Dex文件将被dex2oat预编译成目标平台的机器码,从而提高了App的运行效率。在这个预编译过程中,dex2oat对目标代码的优化过程与Dalvik VM下的dexopt有较大区别,尤其是在5.0版本以后ART环境下新
2016-12-05 11:26:01 1898
原创 Easy Application for U.S company
Easy ApplicationHave you ever tried to apply for a company only to discover they won't let you upload your resume? Instead you have to meticulously fill out pages of information (all of which could
2016-11-30 12:47:14 3660
原创 经典算法题:数字三角形寻找最大路径——动态规划和递归调用两种解法
题目:数字三角形,从顶部出发,在每一结点可以选择向左走或得向右走,一直走到底层,要求找出一条路径,该路径上的数字和最大,输出这个最大值。(1)样例输入:第一行是数塔层数N(1第二行起,从一个数字按数塔图形依次递增,共有N层。51311 812 7 26 6 14 15 812 7 13 24 11(2)样例输出:86方法1动态规划状态
2016-11-10 15:11:32 7406
原创 动态规划:最少硬币找零问题、01背包问题、完全背包问题
动态规划把问题分为子为题,解决了这些子问题,再把子问题合并起来,便可以得到问题的解。在解决子问题过程中,需要把子问题的解保存起来方便后面使用。最少硬币找零问题为:给予不同面值的硬币若干种种(每种硬币个数无限多),用若干种硬币组合为某种面额的钱,使硬币的的个数最少。在现实生活中,我们往往使用的是贪心算法,比如找零时需要13元,我们先找10元,再找2元,再找1元。如果我们的零钱可用的有
2016-11-09 15:45:15 15659 2
原创 求最大连续子序列的和,两种解法:动态规划 & Kadane算法
这是一个经典问题,对于一个包含负值的数字串array[1...n],要找到他的一个子串array[i...j](0这里我们需要注意子串和子序列之间的区别。子串是指数组中连续的若干个元素,而子序列只要求各元素的顺序与其在数组中一致,而没有连续的要求。对于一个元素数为n的数组,其含有2^n个子序列和n(n+1)/2个子串。如果使用穷举法,则至少需要O(n^2)的时间才能得到答案。该问题是197
2016-11-05 15:18:46 3410
转载 经典算法题:大数据处理常见算法题
第一部分、十道海量数据处理1、海量日志数据,提取出某日访问百度次数最多的那个IP。 此题,在我之前的一篇文章算法里头有所提到,当时给出的方案是:IP的数目还是有限的,最多2^32个,所以可以考虑使用hash将ip直接存入内存,然后进行统计。 再详细介绍下此方案:首先是这一天,并且是访问百度的日志中的IP取出来,逐个写入到一个大文件中。注意到IP是32位的,最多有个2^32个IP。同
2016-11-01 18:08:24 25247 2
转载 经典算法题目:Cracking the coding interview 问题与解答
Cracking the coding interview--问题与解答March 14, 2013作者:Hawstein出处:http://hawstein.com/posts/ctci-solutions-contents.html声明:本文采用以下协议进行授权: 自由转载-非商用-非衍生-保持署名|Creative Commons BY-NC-ND 3.0 ,转载请注
2016-10-31 00:39:47 7050
原创 经典算法题:谷歌面试经典题目
谷歌面试官经典作品(CTCI)目录1.1 判断一个字符串中的字符是否唯一1.2 字符串翻转1.3 去除字符串中重复字符1.8 利用已知函数判断字符串是否为另一字符串的子串2.1 从链表中移除重复结点2.2 实现一个算法从一个单链表中返回倒数第n个元素2.3 给定链表中间某结点指针,删除链表中该结点2.4 求由两个链表结点组成的数之和2.5 给定一个循环链表,
2016-10-31 00:14:42 9752 1
原创 经典算法题:排列组合-有放回地取不同颜色的小球
有6种不同颜色的球,分别记为1,2,3,4,5,6,每种球有无数个。现在取5个球,求在以下的条件下: 1、5种不同颜色, 2、4种不同颜色的球, 3、3种不同颜色的球, 4、2种不同颜色的球, 它们的概率。解答:排列用C,组合用A。既然题目说是无数个,就相当于有放回的取6个不同颜色的球。因此,如果任意取5个球,每取一个球都有6种可能,所有可能情况是6^5=7776,充当分母.
2016-10-30 23:27:02 27004 1
原创 解密https的建立过程
1. https协议简介 为什么是协议简介呢?因为https涉及的东西实在太多了,尤其是一些加密算法,非常的复杂,对于这些算法面的东西就不去深入研究了,这部分仅仅是梳理一下一些关于https最基本的原理,为后面分解https的连接建立以及https优化等内容打下理论基础。2. 对称加密算法 对称加密是指加密和解密使用相同密钥的加密算法。它要求发送方和接收方在安全通信之前
2016-10-28 17:24:27 4975 1
原创 经典算法题:无序整数数组中找第k大的数
经典问题:写一段程序,找出数组中第k大的数,输出数所在的位置。【解法一】先排序,然后输出第k个位置上的数我们先假设元素的数量不大,例如在几千个左右,在这种情况下,那我们就排序一下吧。在这里,快速排序或堆排序都是不错的选择,他们的平均时间复杂度 都是 O(N * logN)。然后取出前 K 个,O(K)。总时间复杂度 O(N * logN)+ O(K) = O(N * logN)。你
2016-10-27 21:02:19 37559 5
转载 Android热修复技术选型——三大流派解析
转自:移动开发前线2015年以来,Android开发领域里对热修复技术的讨论和分享越来越多,同时也出现了一些不同的解决方案,如QQ空间补丁方案、阿里AndFix以及微信Tinker,它们在原理各有不同,适用场景各异,到底采用哪种方案,是开发者比较头疼的问题。本文希望通过介绍QQ空间补丁、Tinker以及基于AndFix的阿里百川HotFix技术的原理分析和横向比较,帮助开发者更深入了解
2016-09-20 16:51:16 541
原创 Android 如何静默安装app
Android 要想静默安装app,必须是系统应用或者具有Root权限,否则根本不可能实现静默安装。本文假设你的app是系统应用(有系统签名,或者放在系统/system/app 或 /system/priv-app分区),则可以进行以下安装:1. 有提示的安装(所有第三方应用都可以)Intent intent = new Intent(Intent.ACTION_VIEW);inte
2016-08-03 15:43:03 7581 6
原创 Android ContentProvider 多进程multiprocess 详解
大家在使用ContentProvider的时候有没有发现android:multiprocess 和 android:process 这两个标签:<provider android:name="com.test.MyProvider" android:authorities="com.test.provider.authority" android:multiproce
2016-07-28 00:00:25 12681 3
原创 Android 如何判断wifi热点是否需要密码
一、最近开发wifi热点扫描功能,要判断当前连接的wifi热点是否需要密码。在网上搜索之后,发现有如下方法: private static final int WIFI_NEED_PASSWORD = 0; private static final int WIFI_NO_PASSWORD = 1; private static final int WIFI_NOT
2016-07-26 23:53:18 12360 6
原创 如何用 Gradle 构建 Android 工程项目
本篇具体介绍如何用 Gradle 构建 Android 工程项目;有关Gradle的基本语法可以参见另一篇文章:http://blog.csdn.net/wangbaochu/article/details/51177672一、签名Gradle本身支持直接签名,只需要在releas部分添加如下代码即可: signingConfigs { debug {
2016-06-22 13:59:16 2415
原创 Android 为什么当数据库改变时,与CursorAdapter关联的页面始终不更新
在android 开发过程中,也许有人会经常遇到这样的问题:CursorAdapter与一个list页面绑定,所有的代码都正确,CursorAdapter 与 Cursor也正常关联,但当数据库改变时list页面就是不更新!下面我们来看看源代码:CursorAdapter.javavoid init(Context context, Cursor c, boolean autoRequer
2016-06-16 22:26:31 3052
原创 Android 远程调试工具STF——开源项目
对于不同Android团队异地协同开发,机型适配需要花大量的时间和精力。如何协调有限的手机资源是重中之重。经常会遇到要验证一个bug,却发现手边没有对应的机型,异地团队有但是鞭长莫及。为了解决异地开发之间的困难,今天大家介绍一个远程测试机管理的工具STF(管理Android手机,能够支持主要Android版本包括Android N,客户端不需要root,STF 本身是一个基于node开发的开源项目
2016-06-03 13:07:38 18124 2
原创 Android ViewPager 如何显示大量图片
我最近想用ViewPager 来实现类似图片Gallery的效果:即滑动的时候图片一张一张显示!先搜了一下网上关于ViewPager的用法,千篇一律的都是如下的列子:public class MyPagerAdapter extends PagerAdapter { List viewList = null; public MyPagerAdapter(List vie
2016-05-23 23:03:57 6055 2
原创 Android Multidex 遇到的问题
Android 的classLoader在加载APK的时候限制了class.dex包含的Java方法总数不能超过65535,但是现在随便一个复杂一点的App,轻而易举就能超过65535。为了解决这个问题,google推出了官方的解决方案——Multidex一、使用之后,相信很多人都遇到过以下几个问题:1. Dalvik LinearAlloc Limit安装时异常 Installa
2016-04-18 14:15:18 12494 8
原创 Android Gradle 语法简介
Android Studio 是基于Gradle 作为编译系统的,下面简单总结一下Gradle!一、引言Gradle 是groovy语言实现的构建工具. groovy是运行在jvm平台的一门敏捷开发语言.其语法和java有诸多类似之处,然而其具备一些java没有的概念需要读者细细体会.下面会详细的介绍groovy的基本语法,当然如果您已经对groovy的语法有了一定的了解.可以直接跳过这一
2016-04-18 11:00:45 4281 1
android PackageManager 反射调用相关的类
2016-08-03
Cordova_android_demo
2016-01-21
WD412.exe驱动程序开发工具
2009-08-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人