自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Coder Yang

Code Once ,Think Twice .

  • 博客(100)
  • 收藏
  • 关注

原创 Android SharedPreferences 封装使用技巧

一、背景 SharedPreferences 是众所周知的 Android 三大数据持久化存储之一,其余两个分别是文件存储和数据库存储,之前在使用的时候一般就都是直接调用 PreferenceManager.getDefaultSharedPreferences() 然后再进行一系列的链式操作,对需要存储的数据进行存储和获取,但是我们一般都是在很多地方都需要使用到对 SharedP...

2019-02-27 22:19:59 707

原创 Android 浅谈 MPAndroidChart 坐标轴设置为字符串的方法

一、问题背景 最近在做项目,然后项目当中的一个要求是需要实现横坐标坐标值为字符串(因为后端给的时间的数据就是转成字符串的格式发过来的)、纵坐标为数字,众所周知,在 MPAndroidChart 中默认的坐标轴的坐标值都是 float 类型的,所以我上网进行了相关资料的查询并进行了相关的试验,最后完成的效果大致如下。 因为项目还在数据测试阶段,数据量较少,所以看起...

2019-02-27 21:20:44 4410

原创 Android RxJava 关于网络请求时线程调度的封装

一、问题背景        之前在做项目使用 RxJava 写有关网络请求的代码的时候,因为对于网络的请求需要在 IO 线程中进行,而 UI 的更新则必须在主线程,所以总是要进行翻来覆去的进行固定的线程切换,我就想是不是可以将这种重复的工作抽离出来,于是上网搜索了相关的 RxJava 的网络请求封装,网上对于 RxJava 网络请求的封装还是挺多的,但是最如果只想要实现最简单的网络请求时的线程...

2019-02-25 22:30:53 671

原创 《剑指Offer》52. 矩阵中的路径

题目:52. 矩阵中的路径知识点:回溯算法题目描述:请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,向右,向上,向下移动一个格子。如果一条路径经过了矩阵中的某一个格子,则之后不能再次进入这个格子。 例如 a b c e s f c s a d e e 这样的3 X 4 矩阵中包含一条字符串"bcce...

2019-02-24 22:35:18 98

原创 《剑指Offer》51. 二叉搜索树的第k个结点

题目:51. 二叉搜索树的第k个结点知识点:二叉搜索树题目描述:给定一棵二叉搜索树,请找出其中的第k小的结点。例如, (5,3,7,2,4,6,8)    中,按结点数值大小顺序第三小结点的值为4。解题思路:解法一和解法二的思路是一样的,即利用二叉搜索树中序遍历的结果为升序数列,只需通过中序遍历,同时对结点进行计数就可以了。代码://解法一(自研): Tree...

2019-02-24 20:44:45 211

原创 《剑指Offer》50. 序列化二叉树

题目:50. 序列化二叉树知识点:二叉树题目描述:请实现两个函数,分别用来序列化和反序列化二叉树。解题思路:就这道题来说,三种解法的思路都是一样的,都是通过前序遍历来序列化二叉树,之后再通过递归来反序列化二叉树。但是根据代码量其实很容易看出来,因为 C++ 的操作涉及指针,所以不论是代码量还是代码的复杂程度都超过 JAVA。代码://解法一(剑指Offer):voi...

2019-02-24 20:20:06 179

原创 《剑指Offer》49. 孩子们的游戏(圆圈中最后剩下的数)

题目:49. 孩子们的游戏(圆圈中最后剩下的数)知识点:数学优化题目描述:每年六一儿童节,牛客都会准备一些小礼物去看望孤儿院的小朋友,今年亦是如此。HF作为牛客的资深元老,自然也准备了一些小游戏。其中,有个游戏是这样的:首先,让小朋友们围成一个大圈。然后,他随机指定一个数m,让编号为0的小朋友开始报数。每次喊到m-1的那个小朋友要出列唱首歌,然后可以在礼品箱中任意的挑选礼物,并且不再回...

2019-02-24 19:30:44 333

原创 浅谈关于项目的本地数据测试(基于 WAMP 和 NATAPP)

一、背景介绍       因为我个人在去年的时候曾经做过一个小程序+网页的一整套系统,包含前端编码、后端编码、数据库设计、服务器搭建等等的整整一整套工作,在项目的开发过程中,刚一开始遇到的最棘手的一个问题就是当前端页面已经写好后,怎样去进行本地的数据测试,也就是测试程序能否通过网络请求到正确的数据,而且对于当时的小程序开发,其请求的网址必须是包含 SSL 协议的,也就是必须是以 https 开...

2019-02-24 09:34:59 358

原创 Android 关于bean 的数据封装

一、背景介绍       因为近期一直在做一个项目,之前对 MVP 架构和一些热门的第三方框架也是仅限于理论的理解,所以打算借着这次这个项目能对 MVP 架构以及相关热门第三方库有更深一步的了解。在这个项目的实际搭建过程中,我也进行了很多资料的查询,学习到了许多防止内存泄漏和对相关操作的一些封装,这些小的技巧和知识点都使我在做项目的过程中受益匪浅。因此,正好项目已经接近尾声,所以打算对之前一些...

2019-02-23 20:56:58 2196

原创 《剑指Offer》48. 构建乘积数组

题目:48. 构建乘积数组知识点:数组题目描述:给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*...*A[n-1]。不能使用除法。解题思路:解法一:通过分析结果的乘积数组是由两部分构成,第一部分是当前元素的前面所有元素的乘积,第二部分是当前元素后面所有元素的乘...

2019-02-23 18:40:16 86

原创 《剑指Offer》47. 数组中重复的数字

题目:47. 数组中重复的数字知识点:哈希表题目描述:在一个长度为n的数组里的所有数字都在0到n-1的范围内。 数组中某些数字是重复的,但不知道有几个数字是重复的。也不知道每个数字重复几次。请找出数组中任意一个重复的数字。 例如,如果输入长度为7的数组{2,3,1,0,2,5,3},那么对应的输出是第一个重复的数字2。解题思路:这道题的解法很像前面一道链表的题,解法比较简单的就...

2019-02-23 17:50:42 110

原创 《剑指Offer》46. 对称的二叉树

题目:46. 对称的二叉树知识点:二叉树题目描述:请实现一个函数,用来判断一颗二叉树是不是对称的。注意,如果一个二叉树同此二叉树的镜像是同样的,定义其为对称的。解题思路:解题的思路主要是运用递归的思想,即递归的判断左子树的左结点和右子树的右结点,当其都存在但不相等或者其中一个结点存在而另一个结点为空时则肯定不是对称二叉树 ,否则的话当两个节点同时为空时直接判定为此子数为对称二叉...

2019-02-23 16:15:11 96

原创 《剑指Offer》45. 删除链表中重复的结点

题目:45. 删除链表中重复的结点知识点:链表题目描述:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5。解题思路:我的想法很简单,即直接使用两个指针,一个为前指针,即位于需要被删除的子链表的前一个结点,另一...

2019-02-23 15:51:23 87

原创 《剑指Offer》44. 链表中环的入口结点

题目:44. 链表中环的入口结点知识点:链表题目描述:给一个链表,若其中包含环,请找出该链表的环的入口结点,否则,输出null。解题思路:解题的思路比较简单,使用两个快慢两个指针,快指针一次走两步,慢指针一次走一步,根据数学知识可得,当链表中存在环的时候,在环中快指针一定可以再领先慢指针一圈后与慢指针相遇,根据这个原理可以直接判断链表中是否存在环,第二步是当链表存在环的时候,我...

2019-02-23 15:14:59 112

原创 《剑指Offer》43. 把二叉树打印成多行

题目:43. 把二叉树打印成多行知识点:二叉树题目描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。解题思路:主要是使用 BFS ,通过使用队列来对节点进行保存,保证节点的先进先出,同时对每一层的入列和出列的节点进行计数,以此判断每一层的结束位置。代码://解法一(自研): vector<vector<int>> P...

2019-02-22 11:24:03 107

原创 《剑指Offer》42. 按之字形顺序打印二叉树

题目:42. 按之字形顺序打印二叉树知识点:二叉树题目描述:请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。解题思路:解题的思路就是使用两个栈来进行轮换存储每层的节点,并使用一个标志来判断从左开始从右开始打印。代码://解法一(自研): vector<vect...

2019-02-22 10:49:33 111

原创 《剑指Offer》41. 翻转单词顺序列

题目:41. 翻转单词顺序列知识点:字符串题目描述:牛客最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词...

2019-02-22 10:05:48 79

原创 《剑指Offer》40. 左旋转字符串

题目:40. 左旋转字符串知识点:字符串题目描述:汇编语言中有一种移位指令叫做循环左移(ROL),现在有个简单的任务,就是用字符串模拟这个指令的运算结果。对于一个给定的字符序列S,请你把其循环左移K位后的序列输出。例如,字符序列S=”abcXYZdef”,要求输出循环左移3位后的结果,即“XYZdefabc”。是不是很简单?OK,搞定它!解题思路:解法一:左旋转字符串的实质就是...

2019-02-22 09:52:20 124

原创 《剑指Offer》39. 数字在排序数组中出现的次数

题目:39. 数字在排序数组中出现的次数知识点:二分查找题目描述:统计一个数字在排序数组中出现的次数。解题思路:解法一:先通过二分查找,确定连续的目标数字中的任意一个,然后通过循环来对其左右分别进行扫描,找到和目标数字相同的数字则次数加一,但这种解法的时间复杂度较高,为 O(n)。解法二:这种解法的主要思想也是利用二分法来不断缩小区间来定位目标值的下标,只是这种解法定位的下...

2019-02-21 22:29:41 112

原创 《剑指Offer》38. 两个链表的第一个公共结点

题目:38. 两个链表的第一个公共结点知识点:链表题目描述:输入两个链表,找出它们的第一个公共结点。解题思路:解题思路的关键是两个链表的长度可能不相同,那么就无法同时同步的对两个链表进行比较,但是其实不管两个两个链表的长度如何,其最后的末尾部分一定是公共的部分,因此我们的解决方法是可以先遍历两个链表得出其各自的长度,然后计算出它俩的差值,然后让长链表上的指针先走差值步,将两个链...

2019-02-21 20:42:04 104

原创 《剑指Offer》37. 平衡二叉树

题目:37. 平衡二叉树知识点:二叉树题目描述:输入一棵二叉树,判断该二叉树是否是平衡二叉树。解题思路:解法一:遍历树的每个节点时,调用函数来计算其左、右子数的深度,如果左、右子树的深度相差都不超过 1 ,那么按照定义它就是一棵二叉树,但是这种解法中每个节点要被计算两次深度,算法的复杂度较高,不是很理想。解法二:使用后序遍历的方式对二叉树进行遍历,这样在我们遍历完某个节点的...

2019-02-20 19:44:36 101

原创 《剑指Offer》36. 二叉树的深度

题目:36. 二叉树的深度知识点:二叉树题目描述:输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。解题思路:思路简单,没啥好说的,一行代码搞定。代码://解法一(自研): int TreeDepth(TreeNode* pRoot) { return pRoot =...

2019-02-20 19:15:38 89

原创 《剑指Offer》35. 和为S的连续正数序列

题目:35. 和为S的连续正数序列知识点:双指针题目描述:小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数)。没多久,他就得到另一组连续正数和为100的序列:18,19,20,21,22。现在把问题交给你,你能不能也很快的找出所有和为S的连续正数序列? Goo...

2019-02-20 12:14:53 81

原创 《剑指Offer》34. 和为S的两个数字

题目:34. 和为S的两个数字知识点:双指针题目描述:输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。解题思路:双指针解法,思路清晰简单,不做赘述。代码://解法一(自研): vector<int> FindNumbersWithSum(vector<int&gt...

2019-02-20 11:32:21 129

原创 《剑指Offer》33. 第一个只出现一次的字符

题目:33. 第一个只出现一次的字符知识点:优化、哈希表题目描述:在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写)。解题思路:解题的思路比较简单,直接使用哈希表就可以了,即使用哈希表保存每个字符出现的次数,只需要通过两次扫描就可以解决问题,第一次扫描字符串记录每个字符...

2019-02-20 11:19:25 85

原创 《剑指Offer》32. 丑数

题目:32. 丑数知识点:优化、三指针、动态规划题目描述:把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。解题思路:比较直观的解法就是直接对每一个数字都进行遍历判断,优化之后的解题思路是使用三指针+类似于动态规划的思想,即创建一个记录数组,对之前...

2019-02-20 11:03:00 159

原创 《剑指Offer》31. 整数中1出现的次数

题目:31. 整数中1出现的次数知识点:优化题目描述:求出1~13的整数中1出现的次数,并算出100~1300的整数中1出现的次数?为此他特别数了一下1~13中包含1的数字有1、10、11、12、13因此共出现6次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中1出现的次数(从1 到 n 中1出现的次数)。解题思路:解...

2019-02-20 10:02:00 108

原创 Android 解决 ViewPager 高度 wrap_content 无效问题

问题:昨晚在做项目的时候遇到一个问题,就是关于 ViewPager 的高度使用 wrap_content 设置无效问题,然后查找了很多资料,找到了一个比较靠谱的解决方案。大概的原理就是继承原有的 ViewPager 类,并对它的 OnMeasure 方法进行重写,使 ViewPager 的高度为其子视图的最大高度值。关于 OnMeasure 测量过程的详细过程,可以参考 《Android开发艺...

2019-02-18 21:57:22 1377 1

原创 《剑指Offer》30. 连续子数组的最大和

题目:30. 连续子数组的最大和知识点:动态规划题目描述:HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第...

2019-02-18 21:31:46 129

原创 《剑指Offer》29. 最小的k个数

题目:29. 最小的k个数知识点:数组题目描述:输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。解题思路:解法一:很普通的解法,时间复杂度为 O(nlogn),就是排序之后求前k个数。解法二:基于Partition 快排解法,即不断地进行快排,是最终的快排完成后的下标为 k-1 ,这时位于数组左边的 ...

2019-02-18 21:25:40 100

原创 《剑指Offer》28. 数组中出现次数超过一半的数字

题目:28. 数组中出现次数超过一半的数字知识点:数组题目详情:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。解题思路:解法一:我自己写出的代码,总体来说效率较低,时间复杂度较高,就是通过排序后再进行统计查找。解...

2019-02-18 21:00:19 147

原创 《剑指Offer》27. 字符串的排列

题目:27. 字符串的排列知识点:字符串、回溯算法题目描述:输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。解题思路:主要是使用回溯算法的思想,通过递归从后向前将字符串分为固定部分和变化部分,然后每次对后部的变化部分进行双指针扫描和位置交换。需要注意...

2019-02-18 16:07:19 136

原创 《剑指Offer》26. 二叉搜索树与双向链表

题目:26. 二叉搜索树与双向链表知识点:链表、二叉树题目描述:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。解题思路:解题的思路比较简单,最直观的解法就是直接中序遍历二叉树,并同时保存输出链表的头结点和尾结点就可以了。效率更高的一些解法,是我在牛客网的讨论区里看到的,但大多数的思想也是类似于递归的思想,所...

2019-02-18 14:50:41 126

原创 《剑指Offer》25. 复杂链表的复制

题目:25. 复杂链表的复制知识点:链表题目描述:输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)解题思路:两种思路,一种是运用递归的思想,向问题划分为多个子问题,即每个子问题都是创建新的节点后连接,然后再处理剩余...

2019-02-18 12:48:14 99

原创 《剑指Offer》24. 二叉树中和为某一值的路径

题目:24. 二叉树中和为某一值的路径知识点:二叉树题目描述:输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)解题思路:解题思路就是递归扫描二叉树,同时每一次将目标值修改为目标值减去当前节点值并将当前节点值添加到路径数组中,如...

2019-02-18 08:55:22 110

原创 《剑指Offer》23. 二叉搜索树的后序遍历序列

题目:23. 二叉搜索树的后序遍历序列知识点:BST题目描述:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。解题思路:解题的关键是从后序遍历入手,二叉树的后序遍历即最后遍历根节点,所以对于输入数组最后一个元素,其一定为根节点,之后根据 BST 定义,其左子树都为大于根节点的值,右子树都为...

2019-02-17 12:23:24 82

原创 《剑指Offer》22. 从上往下打印二叉树

题目:22. 从上往下打印二叉树知识点:队列、二叉树题目描述:从上往下打印出二叉树的每个节点,同层节点从左至右打印。解题思路:解题的思路很简单,直接使用 BFS 按层遍历即可,不做赘述。代码://解法一(自研): vector<int> PrintFromTopToBottom(TreeNode* root) { vector&l...

2019-02-17 10:22:21 107

原创 《剑指Offer》21. 栈的压入、弹出序列

题目:21. 栈的压入、弹出序列知识点:栈题目描述:输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否可能为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如序列1,2,3,4,5是某栈的压入顺序,序列4,5,3,2,1是该压栈序列对应的一个弹出序列,但4,3,5,1,2就不可能是该压栈序列的弹出序列。(注意:这两个序列的长度是相等的)解题思路:解法一:通过一个...

2019-02-17 10:10:20 147

原创 《剑指Offer》20. 包含min函数的栈

题目:20. 包含min函数的栈知识点:栈题目描述:定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1))。解题思路:解题的思路比较简单,使用一个辅助栈即可,栈顶始终为当前的栈中的最小元素,当入栈时,如果入栈小于辅助栈栈顶元素,则将入栈元素同时入入辅助栈,否则默认将辅助栈栈的元素再次入栈。需要注意的是,当辅助栈为空时,也应将入主栈的...

2019-02-16 10:38:52 169

原创 《剑指Offer》19. 顺时针打印矩阵

题目:19. 顺时针打印矩阵知识点:数组题目描述:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10。解题思路:题目是比较简单的,但是需要细致耐心的进行分析,不然...

2019-02-16 10:16:15 236

空空如也

空空如也

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

TA关注的人

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