自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 算法-路径总和

路径总和给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true ;否则,返回 false 。解法一、递归求和public boolean hasPathSum = false; public boolean hasPathSum(TreeNode root, int targetSum) { int sum

2021-12-29 14:19:43 177

原创 算法-翻转二叉树

翻转二叉树每个翻转一下就行了 public TreeNode invertTree(TreeNode root) { if(root ==null){ return null; } TreeNode temp = root.left; root.left = root.right; root.right = temp; invertTree(root.left);

2021-12-28 17:24:10 297

原创 给定一个二叉树,检查它是否是镜像对称的

对称二叉树之前我们使用最大深度遍历,遍历了所有的横向的选项,在对比对称的时候思路和算法如果一个树的左子树与右子树镜像对称,那么这个树是对称的。因此,该问题可以转化为:两个树在什么情况下互为镜像?如果同时满足下面的条件,两个树互为镜像:它们的两个根结点具有相同的值每个树的右子树都与另一个树的左子树镜像对称所以很简单的递归,条件就是只要两颗树左右节点相同即可class Solution { public boolean isSymmetric(TreeNode roo

2021-12-28 15:51:19 600

原创 算法-. 二叉树的层序遍历、最大深度

\z给你一个二叉树,请你返回其按层序遍历得到的节点值。 (即逐层地,从左到右访问所有节点)。二叉树的层序遍历首先什么是层序遍历层序遍历?看这一篇就够了!_BNDSllx的博客-CSDN博客_层序遍历BFS 的使用场景总结:层序遍历、最短路径问题---力扣如果我们使用 DFS/BFS 只是为了遍历一棵树、一张图上的所有结点的话,那么 DFS 和 BFS 的能力没什么差别,我们当然更倾向于更方便写、空间复杂度更低的 DFS 遍历。不过,某些使用场景是 DFS 做不到的,只能使用 BFS 遍...

2021-12-22 15:15:01 444

原创 算法-二叉树的前中后序遍历

题目一、二叉树的前序遍历给你二叉树的根节点root,返回它节点值的前序遍历 --letcode解法一、迭代巧妙使用双向队列的先进先出规则,挨个查左节点 public class TreeNode { int val; TreeNode left; TreeNode right; TreeNode() {} TreeNode(int val) { this.val = val; } TreeNode(int v...

2021-12-21 18:38:36 71

原创 算法-用栈实现队列

用栈实现队列请你仅使用两个栈实现先入先出队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现 MyQueue 类:void push(int x) 将元素 x 推到队列的末尾int pop() 从队列的开头移除并返回元素int peek() 返回队列开头的元素boolean empty() 如果队列为空,返回 true ;否则,返回 false来源:力扣(LeetCode)解法一、每次push都互相颠倒一下 while (!st1.em

2021-12-20 16:20:56 181

原创 算法-有效的括号计算

有效的括号给定一个只包括 '(',')','{','}','[',']'的字符串 s ,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。来源:力扣(LeetCode接触队列类的算法:首先弄明白Queue、Deque和LinkedList的区别算法中主要用到了lisnklist的队列特性【Java集合框架】Queue、Deque和LinkedList的区别_Awt_FuDongLai的博客-CSDN博客_deque和lin.

2021-12-20 10:57:37 516

原创 算法-反转链表

给你单链表的头节点head,请你反转链表,并返回反转后的链表。反转链表--leetcode解法一:递归public ListNode reverseList(ListNode head) { ListNode prev = null; ListNode curr = head; while(curr !=null){ ListNode temp = curr.next; curr.next ..

2021-12-17 11:24:26 698

原创 算法合并两个有序链表、移除链表元素

将两个升序链表合并为一个新的升序链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。--leetcode合并两个有序链表一、定义一个新的节点,然后循环两个链表,依次往后链 public ListNode mergeTwoLists(ListNode list1, ListNode list2) { ListNode newNode = new ListNode(); ListNode newNodeTemp = newNode; w...

2021-12-16 10:25:39 912

原创 算法-环形链表的判断

给你一个链表的头节点 head ,判断链表中是否有环。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。如果链表中存在环,则返回 true 。 否则,返回 false 。来源:力扣(LeetCode)环形链表pos是内部的处理,不用关注解法一、一

2021-12-14 16:38:58 104

原创 算法-赎金信,计数模拟+有效的字母异位词

给你两个字符串:ransomNote 和 magazine ,判断 ransomNote 能不能由 magazine 里面的字符构成。如果可以,返回 true ;否则返回 false 。magazine 中的每个字符只能在 ransomNote 中使用一次。来源:力扣(LeetCode)一、设计字符串的计数可以使用hash来统计因为创建了hash,有了额外的空间和时间开销public boolean canConstruct(String ransomNote, String .

2021-12-14 14:37:31 318

原创 算法-字符串中的第一个唯一字符

给定一个字符串,找到它的第一个不重复的字符,并返回它的索引。如果不存在,则返回 -1。--leetcode在评论里看到一句话叫做,碰到计数,要么hash要么桶一、hash计数key代表字符串,value代表对应出现的次数 public int firstUniqChar(String s) { HashMap<Character, Integer> hashMap = new HashMap<>(); for(int i=0

2021-12-14 10:44:13 335

原创 算法-矩阵置零

给定一个mxn的矩阵,如果一个元素为0,则将其所在行和列的所有元素都设为0。请使用原地算法(leetcode)https://leetcode-cn.com/problems/set-matrix-zeroes/解法一:暴力破解时间复杂度:O(mn)空间复杂度:O(m+n)其实目的就是统计哪几行哪几列的元素需要归0class Solution { public void setZeroes(int[][] matrix) { int n =...

2021-12-13 17:30:35 275

原创 算法-杨辉三角返回

题目:给定一个非负整数numRows,生成「杨辉三角」的前numRows行。在「杨辉三角」中,每个数是它左上方和右上方的数的和。转自leetcode杨辉三角的三角有一个特点,就是低位的结果已知,求高位的某些数,分析思路跟动态规划差不多,就是循环从低位已知方法计算,然后高位找规律添加数据 public List<List<Integer>> generate(int numRows) { List<List<Integer>...

2021-12-09 16:41:01 83

原创 算法-重塑矩阵

在 MATLAB 中,有一个非常有用的函数 reshape ,它可以将一个m x n 矩阵重塑为另一个大小不同(r x c)的新矩阵,但保留其原始数据。给你一个由二维数组 mat 表示的m x n 矩阵,以及两个正整数 r 和 c ,分别表示想要的重构的矩阵的行数和列数。重构后的矩阵需要将原始矩阵的所有元素以相同的 行遍历顺序 填充。如果具有给定参数的 reshape 操作是可行且合理的,则输出新的重塑矩阵;否则,输出原始矩阵。来源:力扣(LeetCode)一、老老实实一个一个双...

2021-12-09 15:15:30 203

原创 算法--买卖基金的时机

给定一个数组 prices ,它的第i 个元素prices[i] 表示一支给定股票第 i 天的价格。你只能选择 某一天 买入这只股票,并选择在 未来的某一个不同的日子 卖出该股票。设计一个算法来计算你所能获取的最大利润。返回你可以从这笔交易中获取的最大利润。如果你不能获取任何利润,返回 0来源:力扣(LeetCode)使用了暴力解法,双重循环直接超时了哈哈,使用dp思想我们来假设自己来购买股票。随着时间的推移,每天我们都可以选择出售股票与否。那么,假设在第 i 天,如果我们要在...

2021-12-08 18:26:37 167

原创 两个数组交集

给你两个整数数组nums1 和 nums2 ,请你以数组形式返回两数组的交集。返回结果中每个元素出现的次数,应与元素在两个数组中都出现的次数一致(如果出现次数不一致,则考虑取较小值)。可以不考虑输出结果的顺序。来源:力扣(LeetCode)一、个人暴力破解空间复杂度蛮高的,,,, public int[] intersect(int[] nums1, int[] nums2) { List<Integer> list = new ArrayList<..

2021-12-08 11:10:57 167

原创 合并两个有序数组

给你两个按 非递减顺序 排列的整数数组nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。注意:最终,合并后数组不应由函数返回,而是存储在数组 nums1 中。为了应对这种情况,nums1 的初始长度为 m + n,其中前 m 个元素表示应合并的元素,后 n 个元素为 0 ,应忽略。nums2 的长度为 n来源:力扣(LeetCode)一、最初..

2021-12-07 13:41:00 626

原创 数据结构(LeetCode)-两数之和

给定一个整数数组 nums和一个整数目标值 target,请你在该数组中找出 和为目标值 target的那两个整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。一、暴力破解:双循环,时间复杂度在O(n2),很复杂class Solution { public int[] twoSum(int[] nums, int target) { int[] index = new i...

2021-12-07 10:17:26 127

原创 每日算法解析-----分割线2021.12.7

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

2021-12-07 09:53:08 252

原创 Gradle 知识汇总

gradle基本属性分析Gradle基础介绍Gradle自定义插件开发自定义gradle插件实现一键使用360加固插件是一种遵循一定规范的应用程序接口编写出来的程序。其只能运行在程序规定的系统平台下(可能同时支持多个平台),而不能脱离指定的平台单独运行。Gradle就是一个Java程序,Gradle的插件可以在这个Java程序执行过程中执行额外的代码一、作为独立项目,发布到仓库新建java library:创建plugin插件类,在引入...

2021-03-08 17:35:53 176

原创 Binder、Dalvik系统启动流程

图文详解 Android Binder跨进程通信机制 原理Android:学习AIDL,这一篇文章就够了(上)

2021-02-23 16:33:44 70

原创 Handler总结

Handler源码分析(超详细的)Handler完全解读——Handler的使用Android进阶——深入浅出Handler(一)Android开发——避免内存泄露简介在android开发中,经常会在子线程中进行一些操作,当操作完毕后会通过handler发送一些数据给主线程,通知主 线程做相应的操作。 探索其背后的原理:子线程 handler 主线程 其实构成了线程模型中的经典问题 生产者-消费者 模型。 生产者-消费者模型:生产者和消费者在同一时间段内共用同一个存储空间,生产者往存

2021-02-08 15:59:36 217

原创 JVM基础知识(二)

目录虚拟机中的对象对象的分配1)检查加载2)分配内存指针碰撞3)内存空间初始化4)设置5)对象初始化对象的内存布局对象的访问定位句柄直接指针判断对象的存活引用计数法可达性分析Finalize方法各种引用强引用软引用 SoftReference弱引用 WeakReference虚引用 PhantomReference学习垃圾回收的意义对象的分配策略栈上分配没有逃逸对象优先在Eden区分配大对象直接进入老

2021-02-02 15:18:32 267

原创 mvc、mvp、mvvm讨论

MVC2011年使用ecllipse我们的工程。有layout,在ecllipse上默认就是view层,actiity默认控制层c层,但是并没有明确的文档表示mvc是一个很明确的分工方式,但是这是一个很不好的情况,activity会变得非常冗余。稍有不慎,activity会把model层,view层的活给干了,几千行代码小菜一碟。这里最大的问题就是activity是高耦合,太臃肿所以这种设计模式并不是我们推荐的MVPactivity只有view,其他操作交给p层。相当于把act...

2021-02-01 16:13:18 93

原创 【Jetpack】WorkManager

WorkManager有什么用: 一:确保重要的后台任务,一定会被执行,后台任务(例如:非及时性的 (请求服 务器 及时性) 上传,下载,同步数据 等) 二:内部对电量进行了优化,不需要我们去处理电量优化了 三:API 14 到 最新版本,都可以使用WorkManager来管你你的后台任务 四:注意:WorkManager不能做保活操作 五:调度,管理,执行的后台任务的场景,通常是是可延迟的后台任务WorkManager概述你的任务不可能总是在前台,但是还要确保你的那

2021-01-28 14:54:17 396 2

原创 【Jetpack】 Paging

Jetpack 之 Paging转载自享学课堂derry使用Paging的好处是什么:​ 好处一:分页库可以更轻松地在应用程序中的RecyclerView逐步和优雅地加载数据​ 好处二:数据请求消耗的网络带宽更少,系统资源更少​ 好处三:即使在数据更新和刷新期间,应用程序仍会继续快速响应用户输入​ 好处四:不过多浪费,显示多少就用多少,做一个素质高的少年Paging的使用:角色一:DataSource(是数据源,包含了多种形式,例如:Room来源,PositionalDataSource来源

2021-01-25 15:10:02 224

原创 【Jetpack】Navigation

一、使用最全面的Navigation的使用指南二、源码解析NavHostFragment的创建官网上设置nav的xml文件 val finalHost = NavHostFragment.create(R.navigation.nav_graph_main); supportFragmentManager.beginTransaction() .replace(R.id.ll_fragment_navigation, finalHost)

2021-01-24 19:23:59 185

原创 dagger2

在了解学些hilt之前,先了解一下dagger2的知识Dagger2详解——最直白易懂、详细的dagger2注入流程原理kotlin版本 hilt使用解析hilt是对draager封装的改进版本,更容易进行注入,更少写代码封装一个简易的hilt网络请求框架,这个框架可以随时切换使用的框架,框架就是用了hilt进行注入使用okhttp注解解析器public class OkHttpProcessor implements IHttpProcessor{ private O.

2021-01-20 10:13:35 94

原创 【Jetpack DataBinding】

【JetPack DataBinding】具体使用方法可以查看这个文档然后直接开始源码的分析一、分析生成的布局文件如何适配的我们知道使用框架的时候添加了data的标签,在其中添加了参数,但是实际上布局是不会识别的,有什么作用呢,我们在生成的build文件里找到了如下两个文件可以发现第一个文件已经去除了data标签,同时底部的xml被打上了tag,和第二个文件的xml的tag一一对应,两个文件形成匹配,在apt形成的代码里实际上就是使用第一个布局来进行试图填充档需要增加属性的时候,会使

2021-01-20 10:12:32 223 1

原创 【Jetpack】LiveData+ViewModel

【Jetpack】ViewModelLiveData是一种具有生命周期感知能力的可观察数据持有类LiveData可以保证屏幕上的显示内容和数据一直保持同步特点:1.LiveData了解UI界面的状态,如果activity不在屏幕上显示,livedata不会触发没必要的界面更新,如果activity已经被销毁,会自动清空与observer的连接,意外的调用就不会发生2.LiveData是一个LifecycleOwner,他可以直接感知activity或fragment的生命周期一、基本的使用

2021-01-18 15:56:40 242

原创 【Jetpack】lifecycle

【JetPack】lifecycle一、LifeCycle基本使用创建liftcycle实现类,实现LifecycleObserverpublic class TestLifeCycle implements LifecycleObserver { private static final String TAG = "test"; @OnLifecycleEvent(Lifecycle.Event.ON_CREATE) public void onCreate() .

2021-01-15 14:42:25 91

原创 JVM基础知识(一)

转载自享学--kingJVM基础知识JVM与操作系统的关系Java Virtual MachineJVM 全称 Java Virtual Machine,也就是我们耳熟能详的 Java 虚拟机。它能识别 .class后缀的文件,并且能够解析它的指令,最终调用操作系统上的函数,完成我们想要的操作。翻译Java 程序不一样,使用 javac 编译成 .class 文件之后,还需要使用 Java 命令去主动执行它,操作系统并不认识这些 .class 文件。所以JVM就是一个翻译。.

2021-01-13 15:32:09 372 2

原创 Glide源码粘贴

一、Glide基本使用Glide.with(this).load(URL).into(imageView)二、Glide源码----withwith的源码接受了不同的参数。最终返回了RequestManager @NonNull public static RequestManager with(@NonNull Activity activity) { return getRetriever(activity).get(activity); } @NonNull

2021-01-05 17:05:47 152

原创 retrofit如何配合Rxjava封装代码

如何使用Retrofit+RxJava框架的简单封装使用掌握之前需要了解以下知识相关知识retrofit源码解析OkHttp原理解析RXJava源码详解上述文章只是讲了一下基本的原理,那么在实际应用里的如何和RXJAVA配合使用呢一、怎么搭配Rxjava使用我们知道,在使用retrofit的时候可以配置网络请求、日志、线程的适配器,其中有一个方法addCallAdapterFactory,这个方法就是为我们添加rxjava线程调度的适配器。 //创建Retrofit对象

2020-12-29 11:42:59 410

原创 retrofit源码解析

准确来说,Retrofit 是一个 RESTful 的 HTTP 网络请求框架的封装。原因:网络请求的工作本质上是 OkHttp 完成,而 Retrofit 仅负责 网络请求接口的封装App应用程序通过 Retrofit 请求网络,实际上是使用 Retrofit 接口层封装请求 参数、Header、Url 等信息,之后由 OkHttp 完成后续的请求操作。在服务端返回数据之后,OkHttp 将原始的结果交给 Retrofit,Retrofit根据用 户的需求对结果进行解析。一、.

2020-12-28 18:30:31 242

原创 IO框架

转载自享学课堂lance学习笔记IO框架数据流是一组有序,有起点和终点的字节的数据序列。包括输入流序列中的数据既可以是未经加工的原始二进制数据,也可以是经一定编码处理后符合某种格式规定的特定数据。因此Java中的流分为两种: 1) 字节流:数据流中最小的数据单元是字节 2) 字符流:数据流中最小的数据单元是字符, Java中的字符是Unicode编码,一个字符占用两个字节。流和输出流。Java.io包中最重要的就是5个类和一个接口。5个类指的是File、OutputStream、.

2020-12-24 15:21:31 78

原创 OkHttp原理解析

七夕节刚过去。周周同学(我也不知道为什么第一个想到的就是周周同学)在读书的时候就是单身狗一条,看到自习室每天都很多美女后,每天晚上跑去自习都干同一件事情。周周每天晚上都坐到自习室最后一排,找张纸条写上:“Hi,可以做我的女朋友吗?我的特长就是特别的长,如果不愿意请向前传”。纸条就一个接一个的传上去了,最后传给了扫地阿姨。最后和扫地阿姨过上了幸福的生活,这真是一个....令人高兴的故事。

2020-12-23 17:24:27 808

原创 并发编程、锁、线程池、阻塞队列

Java并发基础知识补全启动启动线程的方式只有:1、X extends Thread;,然后X.start2、X implements Runnable;然后交给Thread运行线程的状态Java中线程的状态分为6种:1. 初始(NEW):新创建了一个线程对象,但还没有调用start()方法。2. 运行(RUNNABLE):Java线程中将就绪(ready)和运行中(running)两种状态笼统的称为“运行”。线程对象创建后,其他线程(比如main线程)调用了该对象的s.

2020-12-23 15:52:16 307

原创 RXJava源码详解

rxjavaRx介绍ReactiveX的历史ReactiveX是Reactive Extensions的缩写,一般简写为Rx,最初是LINQ的一个扩展,由微软的架构师Erik Meijer领导的团队开发,在2012年11月开源,Rx是一个编程模型,目标是提供一致的编程接口,帮助开发者更方便的处理异步数据流,Rx库支持.NET、JavaScript和C++,Rx近几年越来越流行了,现在已经支持几乎全部的流行编程语言了,Rx的大部分语言库由ReactiveX这个组织负责维护,比较流行的有RxJava

2020-12-18 17:04:08 572

空空如也

空空如也

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

TA关注的人

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