自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

原创 Android 开发之获取手机中所有App

效果图代码添加依赖implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:2.9.30'implementation 'androidx.recyclerview:recyclerview:1.1.0'AppInfo.javaimport android.graphics.drawable.Drawable;/** * created on 2020/8/3 20:22 * * @author Sca

2020-08-03 21:26:46 659 2

原创 《剑指 offer》 学习40之和为 S 的两个数字

题目描述输入一个递增排序的数组和一个数字S,在数组中查找两个数,使得他们的和正好是S,如果有多对数字的和等于S,输出两个数的乘积最小的。输出描述:对应每个测试案例,输出两个数,小的先输出。题目链接:牛客网解题思路使用双指针,一个指针指向元素较小的值,一个指针指向元素较大的值。指向较小元素的指针从头向尾遍历,指向较大元素的指针从尾向头遍历。如果两个指针指向元素的和 sum == target,那么得到要求的结果;如果 sum > target,移动较大的元素,使 sum 变小一些;如

2020-08-02 23:17:54 34

原创 《剑指 offer》 学习39之数组中只出现一次的数字

题目描述一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。题目链接:牛客网解题思路两个不相等的元素在位级表示上必定会有一位存在不同,将数组的所有元素异或得到的结果为不存在重复的两个元素异或的结果。diff &= -diff 得到出 diff 最右侧不为 0 的位,也就是不存在重复的两个元素在位级表示上最右侧不同的那一位,利用这一位就可以将两个元素区分开来。//num1,num2分别为长度为1的数组。传出参数//将num1[0],num2[0]设

2020-08-02 23:16:51 1

原创 《剑指 offer》 学习38之二叉树的深度

题目描述输入一棵二叉树,求该树的深度。从根结点到叶结点依次经过的结点(含根、叶结点)形成树的一条路径,最长路径的长度为树的深度。题目链接:牛客网解题思路public class Main { public static class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {

2020-08-02 23:15:44

原创 《剑指 offer》 学习37之数字在排序数组中出现的次数

题目描述统计一个数字在排序数组中出现的次数。题目链接:牛客网Input:nums = 1, 2, 3, 3, 3, 3, 4, 6K = 3Output:4解题思路public class Main { public static void main(String[] args) { int[] nums = {1, 2, 3, 3, 3, 3, 4, 6}; System.out.println(getNumberOfK(nums,3)); } p

2020-08-02 23:14:34

原创 《剑指 offer》 学习36之两个链表的第一个公共结点

题目描述输入两个链表,找出它们的第一个公共结点。(注意因为传入数据是链表,所以错误测试数据的提示是用其他方式显示的,保证传入数据是正确的)题目链接:牛客网解题思路设 A 的长度为 a + c,B 的长度为 b + c,其中 c 为尾部公共部分长度,可知 a + c + b = b + c + a。当访问链表 A 的指针访问到链表尾部时,令它从链表 B 的头部重新开始访问链表 B;同样地,当访问链表 B 的指针访问到链表尾部时,令它从链表 A 的头部重新开始访问链表 A。这样就能控制访问 A 和 B

2020-08-02 23:12:21

原创 《剑指 offer》 学习35之数组中的逆序对

题目描述在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007题目链接:牛客网输入描述:题目保证输入的数组中没有的相同的数字数据范围:对于%50的数据,size<=10^4对于%75的数据,size<=10^5对于%100的数据,size<=2*10^5解题思路public class Main { publ

2020-07-15 23:24:18 36

原创 《剑指 offer》 学习34之第一个只出现一次的字符

题目描述在一个字符串(0<=字符串长度<=10000,全部由字母组成)中找到第一个只出现一次的字符,并返回它的位置, 如果没有则返回 -1(需要区分大小写).题目链接:牛客网解题思路方法一:最直观的解法是使用 HashMap 对出现次数进行统计,但是考虑到要统计的字符范围有限,因此可以使用整型数组代替 HashMap,从而将空间复杂度由 O(N) 降低为 O(1)。public class Main { public static void main(String[] args)

2020-07-15 23:22:56 30

原创 《剑指 offer》 学习33之丑数

题目描述把只包含质因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含质因子7。 习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第N个丑数。题目连接:牛客网解题思路public class Main { public static void main(String[] args) { System.out.println(getUglyNumber_Solution(1500)); } public static int get

2020-07-14 23:34:53 38

原创 《剑指 offer》 学习32之把数组排成最小的数

题目描述输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这三个数字能排成的最小数字为321323。题目链接:牛客网解题思路可以看成是一个排序问题,在比较两个字符串 S1 和 S2 的大小时,应该比较的是 S1+S2 和 S2+S1 的大小,如果 S1+S2 < S2+S1,那么应该把 S1 排在前面,否则应该把 S2 排在前面。import java.util.*;public class Main {

2020-07-14 23:33:28 29

原创 《剑指 offer》 学习31之整数中1出现的次数(从1到n整数中1出现的次数)

题目描述求出1 ~ 13的整数中1出现的次数,并算出100 ~ 1300的整数中 1 出现的次数?为此他特别数了一下1 ~ 13中包含1的数字有1、10、11、12、13因此共出现 6 次,但是对于后面问题他就没辙了。ACMer希望你们帮帮他,并把问题更加普遍化,可以很快的求出任意非负整数区间中 1 出现的次数(从1 到 n 中1出现的次数)。题目链接:牛客网解题思路考虑从个位开始计算1出现的次数,个位上每10个数就会出现一个1,所以计算十位数之后出现1的次数即n模10的余数为a。假如个位数为0,那

2020-07-14 23:32:26 48

原创 第三方开源库之 MPAndroidChart

目前版本 3.1.0GitHub 地址:https://github.com/PhilJay/MPAndroidChart简介支持x,y轴缩放支持拖拽支持手指滑动支持高亮显示支持保存图表到文件中支持从文件(txt)中读取数据预先定义颜色模板自动生成标注支持自定义x,y轴的显示标签支持x,y轴动画支持x,y轴设置最大值和附加信息支持自定义字体,颜色,背景,手势,虚线等使用在工程的 build.gradle 中添加如下:allprojects { reposit

2020-07-07 22:51:56 87

原创 《剑指 offer》 学习30之连续子数组的最大和

题目描述HZ偶尔会拿些专业问题来忽悠那些非计算机专业的同学。今天测试组开完会后,他又发话了:在古老的一维模式识别中,常常需要计算连续子向量的最大和,当向量全为正数的时候,问题很好解决。但是,如果向量中包含负数,是否应该包含某个负数,并期望旁边的正数会弥补它呢?例如:{6,-3,-2,7,-15,1,2,2},连续子向量的最大和为8(从第0个开始,到第3个为止)。给一个数组,返回它的最大连续子序列的和,你会不会被他忽悠住?(子向量的长度至少是1)题目链接:牛客网解题思路public class Ma

2020-07-03 20:44:45 32

原创 《剑指 offer》 学习29之最小的 K 个数

题目描述输入n个整数,找出其中最小的K个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,。题目链接:牛客网解题思路快速选择复杂度:O(N) + O(1)只有当允许修改数组元素时才可以使用快速排序的 partition() 方法,会返回一个整数 j 使得 a[l…j-1] 小于等于 a[j],且 a[j+1…h] 大于等于 a[j],此时 a[j] 就是数组的第 j 大元素。可以利用这个特性找出数组的第 K 个元素,这种找第 K 个元素的算法称为快速选

2020-07-03 20:21:12 30

原创 《剑指 offer》 学习28之数组中出现次数超过一半的数字

题目描述数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2。如果不存在则输出0。题目链接:牛客网解题思路多数投票问题,可以利用 Boyer-Moore Majority Vote Algorithm 来解决这个问题,使得时间复杂度为 O(N)。使用 cnt 来统计一个元素出现的次数,当遍历到的元素和统计元素相等时,令 cnt++,否则令 cnt–。如果前面查找了

2020-07-03 20:19:46 17

原创 《剑指 offer》 学习27之字符串的排列

题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。输入描述:输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母。题目链接:牛客网解题思路import java.util.*;public class Main { public static ArrayList<String> list = new ArrayList();

2020-07-03 20:18:18 17

原创 《剑指 offer》 学习26之二叉搜索树与双向链表

题目描述输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点指针的指向。题目链接:牛客网解题思路public class Main { public static class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) {

2020-07-03 20:17:05 11

原创 《剑指 offer》 学习25之复杂链表的复制

题目描述输入一个复杂链表(每个节点中有节点值,以及两个指针,一个指向下一个节点,另一个特殊指针指向任意一个节点),返回结果为复制后复杂链表的head。(注意,输出结果中请不要返回参数中的节点引用,否则判题程序会直接返回空)题目链接:牛客网解题思路第一步,在每个节点的后面插入复制的节点。第二步,对复制节点的 random 链接进行赋值。第三步,拆分。/*public class RandomListNode { int label; RandomListNode next

2020-07-03 20:16:13 30

原创 《剑指 offer》 学习24之二叉树中和为某一值的路径

题目描述输入一颗二叉树的根节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。(注意: 在返回值的list中,数组长度大的数组靠前)下图的二叉树有两条和为 22 的路径:10, 5, 7 和 10, 12题目链接:牛客网解题思路import java.util.*;public class Main { public static class TreeNode { int val = 0;

2020-07-03 20:14:28 16

原创 《剑指 offer》 学习23之二叉搜索树的后序遍历序列

题目描述输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。如果是则输出Yes,否则输出No。假设输入的数组的任意两个数字都互不相同。题目链接:牛客网解题思路public class Main { public static void main(String[] args) { int[] data = {4, 8, 6, 12, 16, 14, 10}; System.out.println("true: " + verifySquenceOfBST(data))

2020-07-03 20:13:11 28

原创 Python 学习之小海龟绘图

在 1966 年,Seymour Papert 和 Wally Feurzig 发明了一种专门给儿童学习编程的语言——LOGO语言,它的特色就是通过编程指挥一个小海龟(turtle)在屏幕上绘图。海龟绘图(Turtle Graphics)后来被移植到各种高级语言中,Python内置了turtle库,基本上100%复制了原始的Turtle Graphics的所有功能。实例1#!/usr/bin/env python3# -*- coding: utf-8 -*-' 海龟绘图 '__author

2020-06-02 22:16:46 104

原创 Python 学习之常用内建模块(HTMLParser)

Python 利用 HTMLParser ,可以把网页中的文本、图像等解析出来。实例#!/usr/bin/env python3# -*- coding: utf-8 -*-' HTMLParser '__author__ = 'Kevin Gong'from html.parser import HTMLParserfrom urllib import requestclass EventSearchParser(HTMLParser): def __init__(self

2020-06-02 22:07:09 38

原创 Python 学习之常用内建模块(XML)

目前用的最多的数据格式:json 和 xml。Python 中操作 XML 有两种方式:DOM 和 SAX。DOM 会把整个 XML 读入内存,解析为树,因此占用内存大,解析慢,优点是可以任意遍历树的节点。SAX 是流模式,边读边解析,占用内存小,解析快,缺点是我们需要自己处理事件。正常情况下,优先考虑 SAX,因为 DOM 实在太占内存。在 Python 中使用 SAX 解析 XML 非常简洁,通常我们关心的事件是 start_element,end_element 和 char_data,

2020-06-02 22:02:22 32

原创 Java 学习路线

入门1. 视频:Java语言开发知识体系图Java课程 Java300集大型视频教程Java8编程开发入门2. 书籍《疯狂JAVA讲义第2版》《Java核心技术 卷1 基础知识》文档3. 练习 & 实例100个Java经典编程实例源代码JAVA基础编程练习题–50道基于Java多线程的下载器源码剖析(一)練手小項目一:JAVA聊天室源代码进阶《Java编程思想(第4版)《深入理解java虚拟机》Java Web视频JavaWeb开发知识体系

2020-06-01 23:05:49 24

原创 Python 学习之常用内建模块(base64)

Base64 是一种用 64 个字符来表示任意二进制数据的方法。原理首先,准备一个包含 64 个字符的数组:['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']然后,对二进制数据进行处理,每 3 个字节一组,一共是 3 x 8 = 24 bit,划为 4 组,每组正好 6 个 bit:这样我们得到4个数字作为索引,然后查表,获得相应的4个字符,就是编码后的字符串。如果要编码的二进制数据不是 3 的倍数,最后会剩下

2020-05-31 23:10:00 67

原创 Python 学习之常用内建模块(collections)

collections 是 Python 内建的一个集合模块,提供了许多有用的集合类。namedtuplenamedtuple 是一个函数,它用来创建一个自定义的 tuple 对象,并且规定了 tuple 元素的个数,并可以用属性而不是索引来引用 tuple 的某个元素。这样一来,我们用namedtuple可以很方便地定义一种数据类型,它具备tuple的不变性,又可以根据属性来引用,使用十分方便。#!/usr/bin/env python3# -*- coding: utf-8 -*-' 内建

2020-05-31 23:03:00 58

原创 Python 学习之常用内建模块(datetime)

datetime 是 Python 处理日期和时间的标准库。获取当前日期和时间#!/usr/bin/env python3# -*- coding: utf-8 -*-' 内建模块—datetime '__author__ = 'Kevin Gong'from datetime import datetime# 获取当前datetime:now = datetime.now()print(now)print(type(now))注意: datetime 是模块,datetim

2020-05-31 23:00:21 80

原创 Python 学习之正则表达式

Python 自 1.5 版本起增加了re 模块,它提供 Perl 风格的正则表达式模式。re 模块使 Python 语言拥有全部的正则表达式功能。入门实例:找出字符串中的所有小写字母。import re# 设定一个常量a = '两点水|twowater|liangdianshui|草根程序员|ReadingWithU'# 选择 a 里面的所有小写英文字母re_findall = re.findall('[a-z]', a)print(re_findall)结果:['t', '

2020-05-28 20:34:17 46

原创 Python 学习之线程

线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间。在 Python 中我们要同时执行多个任务怎么办?有两种解决方案:启动多个进程,每个进程虽然只有一个线程,但多个进程可以一块执行多个任务。启动一个进程,在一个进程内启动多个线程,这样,多个线程也可以一块执行多个任务。启动多个进程,每个进程再启动多个线程,这样同时执行的任务就更多了,当然这种模型更复杂,实际很少采用。总结一下就是,多任务的实现有 3 种方式:多进程

2020-05-28 20:33:48 68

原创 Python 学习之进程

线程是最小的执行单元,而进程由至少一个线程组成。如何调度进程和线程,完全由操作系统决定,程序自己不能决定什么时候执行,执行多长时间。在 Python 中我们要同时执行多个任务怎么办?有两种解决方案:启动多个进程,每个进程虽然只有一个线程,但多个进程可以一块执行多个任务。启动一个进程,在一个进程内启动多个线程,这样,多个线程也可以一块执行多个任务。启动多个进程,每个进程再启动多个线程,这样同时执行的任务就更多了,当然这种模型更复杂,实际很少采用。总结一下就是,多任务的实现有 3 种方式:多进程

2020-05-28 20:32:16 73

原创 Python 学习之元类

1. 使用 type() 动态创建类Python 是动态语言。动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的。首先我们新建一个 hello.py 的模块,然后定义一个 Hello 的 classclass Hello(object): def hello(self, name='Py'): print('Hello,', name)然后在另一个模块中引用 hello 模块,并输出相应的信息。其中 type() 函数的作用是可以查

2020-05-27 20:09:16 326

原创 Python 学习之枚举类

使用Python 中我们使用 Enum 来定义了一个枚举类。#!/usr/bin/env python3# -*- coding: UTF-8 -*-from enum import EnumMonth = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'))# 遍历枚举类型for name, member in Month.__members

2020-05-27 20:07:57 47

原创 Python 学习之 Magic Method

Python 的 Magic Method在 Python 中,所有以 “” 双下划线包起来的方法,都统称为"魔术方法"。比如我们接触最多的 __init__ 。魔术方法有什么作用呢?使用这些魔术方法,我们可以构造出优美的代码,将复杂的逻辑封装成简单的方法。1. 一个类中有哪些魔术方法?#!/usr/bin/env python3# -*- coding: UTF-8 -*-class User(object): passif __name__ == '__main__':

2020-05-27 20:05:28 41

原创 Python 学习之模块与包

模块简介在 Python 中,一个 .py 文件就称之为一个模块(Module)。使用模块有什么好处?大大提高了代码的可维护性;编写代码不必从零开始;可以避免函数名和变量名冲突创建自己的模块时,要注意:模块名要遵循Python变量命名规范,不要使用中文、特殊字符;模块名不要和系统模块名冲突,最好先查看系统是否已存在该模块,检查方法是在Python交互环境执行import abc,若成功则说明系统存在此模块。使用模块1. import 语句想使用 Python 源文件,只需在另

2020-05-26 23:25:49 39

原创 Python 学习之面向对象

面向对象编程——Object Oriented Programming,简称OOP,是一种程序设计思想。OOP把对象作为程序的基本单元,一个对象包含了数据和操作数据的函数。基本概念类(Class): 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。方法:类中定义的函数。类变量:类变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。方法

2020-05-23 19:08:56 75

原创 Python 学习之迭代器与生成器

迭代器迭代是 Python 最强大的功能之一,是访问集合元素的一种方式。现在正式进入主题:迭代器,迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法:iter() 和 next()。实例#!/usr/bin/env python3# -*- coding: utf-8 -*-# 1、字符创创建迭代器对象str1 = 'liangdianshui'iter1 = iter ( st

2020-05-23 19:07:50 87

原创 Python 学习之函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。自定义函数1. 规则:函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。函数内容以冒号起始,并且缩进。return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。2. 语法:def functionname( paramete

2020-05-23 19:06:48 71

原创 Android 面试之 Java 并发

Java 并发中考察频率较高的有线程、线程池、锁、线程间的等待和唤醒、线程特性和阻塞队列等。线程1. 线程的状态有哪些?参考回答:new:新创建的线程Ready:准备就绪的线程,由于CPU分配的时间片的关系,此时的任务不在执行过程中。Running:正在执行的任务Block:被阻塞的任务Time Waiting:计时等待的任务Terminated:终止的任务2. 线程中wait和sleep的区别?参考回答:wait方法既释放cpu,又释放锁。sleep方法只释放cpu,但是不.

2020-05-22 23:00:43 69

原创 Python 学习之条件语句和循环语句

一、条件语句1、什么是条件语句Python 条件语句跟其他语言基本一致的,都是通过一条或多条语句的执行结果( True 或者 False )来决定执行的代码块。Python 程序语言指定任何非 0 和非空(null)值为 True,0 或者 null 为 False。2、if 语句的基本形式Python 中,if 语句的基本形式如下:if 判断条件: 执行语句……else: 执行语句……Python 语言有着严格的缩进要求,因此这里也需要注意缩进,也不要少写了冒号 : 。

2020-05-20 21:38:11 53

原创 Python 学习之 set

1、set 的创建创建一个 set,需要提供一个 list 作为输入集合set1=set([123,456,789])print(set1)结果:{456, 123, 789}重复元素在 set 中自动被过滤的。set1=set([123,456,789,123,123])print(set1)结果:{456, 123, 789}2、set 添加元素通过 add(key) 方法可以添加元素到 set 中,可以重复添加,但不会有效果set1=set([123,456,

2020-05-18 20:36:07 47

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