自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

  • 博客(57)
  • 资源 (1)
  • 收藏
  • 关注

原创 iOS OC与Swift文件相互调用

在OC工程中接入纯swift二方库时二方库开发者提供了swift开发代码示例,因此如何在本项目的OC工程中引入swift文件并引用成为了现在面临的一个问题。(本博客未记录OC工程引入swift打包编译阶段需修改的内容)

2024-03-06 16:25:01 923

原创 ASM学习——开端

什么是ASMASM是一个操作java字节码的类库。ASM的操作对象:字节码(bytecode)数据。一个java文件经过java编译器javac编译之后会生成.class文件,在.class文件中,存储的就是字节码数据,ASM的操作对象就是字节码,在很多情况下,字节码的具体表现形式就是class文件。ASM是如何操作字节码数据的:ASM操作字节码的方式是先将字节码进行拆分,加入为达到某种目的实现的修改之后再进行合并。ASM可以执行的操作:analysis:可以针对已有的class进行语法和语义分

2022-04-04 15:56:52 2826 2

原创 左神算法笔记(十一)——图

图的存储方式:邻接表,邻接矩阵邻接表:邻接矩阵:具体的方法和定义可以参考图论中的内容。宽度优先遍历和深度优先遍历宽度优先遍历:利用队列实现从源节点开始依次按照宽度进入队列,然后弹出每弹出一个点,就把该节点所有没进过队列的邻接点放入队列直到队列变空BFS:public static void bfs(Node node){ if(node == null){ re...

2021-09-24 09:54:52 280

原创 根据地理位置多语言切换(3)-多语言切换

在手机应用的实现中经常会遇到需要语言切换用于满足用户环境的多样性。可以根据所处地理位置信息进行经纬度及国家/城市/地区的获取,可以根据此内容进行多语言情况的推荐及切换。完成上述的想法需要进行几个功能的开发:需要通过手机进行地理位置信息获取需要根据地理位置信息进行多语言内容的推荐(涉及地理位置监听)需要将应用内的多语言进行切换多语言切换Android分为两个部分:第一点是本地静态文案或服务器进行多语言设置建立对应语言国际编码string文件夹,以编码结尾。详情可以查看Android开发者中的

2021-09-08 20:59:46 401

原创 根据地理位置多语言切换(2)-地理位置监听

在手机应用的实现中经常会遇到需要语言切换用于满足用户环境的多样性。可以根据所处地理位置信息进行经纬度及国家/城市/地区的获取,可以根据此内容进行多语言情况的推荐及切换。完成上述的想法需要进行几个功能的开发:需要通过手机进行地理位置信息获取需要根据地理位置信息进行多语言内容的推荐(涉及地理位置监听)需要将应用内的多语言进行切换地理位置信息的监听由于地理位置信息获取时必须填入activity,对于需要在多个acticity中使用地理位置信息此时就不是十分的方便。将地理位置信息保存为全局变量,便于

2021-09-06 20:49:09 166

原创 根据地理位置多语言切换(1)- 获取地理位置信息

在手机应用的实现中经常会遇到需要语言切换用于满足用户环境的多样性。可以根据所处地理位置信息进行经纬度及国家/城市/地区的获取,可以根据此内容进行多语言情况的推荐及切换。完成上述的想法需要进行几个功能的开发:需要通过手机进行地理位置信息获取需要根据地理位置信息进行多语言内容的推荐需要将应用内的多语言进行切换1. 进行地理位置信息获取及地理位置上传至后台地理位置信息获取包含了以下几个功能:进行GPS权限的获取,此操作需要在初始进行应用时进行请求。避免无法请求地理位置信息导致无法获取地理位置

2021-09-06 18:29:59 332

原创 retrofit学习二——MVP及Butterknife

MVP框架学习Butterknife学习MVP学习:MVP基本框架进行改进上面的是图片是上面MVP学习的框架。model负责进行底层数据库的链接以及相关底层逻辑功能的完善,view负责进行Android页面的展示,包括的内容除了activity之外还有fragment。而presenter翻译过来是主持人的意思,在MVP中主要负责的内容是进行Model和View的连接,进行相应的解耦操作。在对MVP框架进行优化的过程中,会将基本的功能进行抽取,存放在base中,进行部分逻辑的简化,方便之后进

2020-08-10 16:05:13 154

原创 Retrofit框架进行Android网络编程交互

post和get的区别post和get的基本区别:GET在浏览器回退时是无害的,而POST会再次提交请求。GET产生的URL地址可以被Bookmark,而POST不可以。GET请求会被浏览器主动cache,而POST不会,除非手动设置。GET请求只能进行url编码,而POST支持多种编码方式。GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。GET请求在URL中传送的参数是有长度限制的,而POST么有。对参数的数据类型,GET只接受ASCII字符,而POST没有限

2020-08-09 21:22:36 139

原创 回溯算法,深度优先遍历

回溯算法和深度优先遍历在求全部情况的时候尤其适用,例如力扣22题这一类问题中,一般都是在一颗隐形的树上进行求解,可以使用深度优先遍历或者广度优先遍历,但是我们自己写代码推荐使用深度优先遍历,深度优先遍历可以使用递归,借助系统栈完成状态的转移。先给出第一种非全局变量不需要...

2020-05-16 10:10:45 714

原创 删除链表倒数第n个节点

这道题目比较简单,但是只使用一次遍历,利用前后两个节点(类似于双指针)的形式来进行遍历则会存在一个问题,那就是如果头结点被删掉无法正常进行之后的node = node.next操作。因此这道题的做法是自己创建一个新的头结点,此时原本的头结点就变成了中间节点,则可以进行正常的操作,这种思路比较值得借鉴,之后如果出现头结点需要单独讨论的时候可以参考这种做法。...

2020-05-09 21:21:03 113

原创 牛客刷题-动态规划

这道题困扰了我一个下午,终于看了别人代码理解了,首先声明,针对这个题目其实可以有其他解法,而不仅仅是利用动态规划,可以同样适用霍夫曼编码的思路来进行,每整一次进行一次数据的整合,形成一个新的数组,同时维护一个int类型的数字用于记录所消耗的能量,能量记录方式可以按照整合之后的数字进行记录,每整合一次则相加一次,可以实现一个简单的求和。这道题官方给出的思路是利用动态规划进行解题,这里再次回顾一下动...

2020-05-07 21:53:39 329

原创 import tensorflow as tf报错ModuleNotFoundError: No module named 'tensorflow'

在安装tenserflow和keras的时候,安装完毕进行验证的时候会报错解决方法就是需要安装tf-nightly,安装完毕错误就不再报了pip install tf-nightly

2020-03-16 08:14:38 12572 5

原创 类加载器的分类

上图是根据java虚拟机规范给出的划分形式。下图给出针对于具体的类的形式,采用不同的类加载器,以及其父类之间的关系。具体内容参考上图所示。针对于java的核心类库,均采用引导类加载器进行加载,所以输出classLoader都是null,而用户自定义的类都是默认采用系统类加载器进行加载,向上的parent为扩展类加载器,再上层为引导类加载器,又为null。引导类加载器从上图中可以直到包...

2020-03-04 17:43:52 261

原创 双亲委派机制

双亲委派机制工作原理java虚拟机对于class文件采用的是按需加载的方式,当需要使用该类时才会将他的class文件加载到内存生成class对象,而且加载某个class文件时,java虚拟机采用的是双亲委派机制,将请求交给父类处理,进行任务委派。具体委派机制如上图所示,将请求传到最顶端的引导类加载器,然后从上往下依次进行判断,一旦有符合的可以进行类的加载,则停止。上图为错误示范,自己单独新...

2020-03-04 17:05:12 237

原创 JVM类加载器子系统

内存结构简图内存结构简图是JVM整体框架的一个展示,在记录JVM相关内容时都会用本图片进行一个系统的展示当前所讲章节在整个JVM中所在位置与相应功能。类加载器子系统从图中可以看到类加载器子系统分为了三个部分,分别是加载阶段,链接阶段和初始化阶段。整体的作用是将class类文件进行一个转码解析,方便电脑进行读取和执行。...

2020-03-04 09:55:33 404

原创 安装NVIDIA CUDA失败最简单详细解决方法

针对于这样的情况直接下载显卡驱动卸载工具进入网站点击下载网页下拉,会出现如下图所示的内容,点击官方下载,下载软件运行程序下载完之后是一个压缩包的形式,解压缩,之后点击运行,如果不是最新版本会跳出如下弹出框,程序是否为最新版本没有影响,都可以执行卸载操作,点击确定会弹出网页,同时该软件也会直接打开。之后会弹出为非安全模式,也没有影响,可以直接运行该程序。重新安装CUDA此时重启...

2020-03-01 22:11:25 32270 27

原创 jvm可视化监控工具

打开jdk文件,找到bin目录找到jconsole.exe,如果已经将bin路径保存到环境变量中,则可以利用cmd指令打开该文件打开exe文件查看信息

2020-02-26 10:26:23 171

原创 求最大子矩阵代码详解

思路为

2020-02-25 16:28:59 222

原创 LinkedList常用方法

双链表对于算法题而言经常会使用到,所以单独拿出双链表进行讲解。双链表在java中实现了list和Deque接口,可以实现所有的可选的list操作,并且也允许所有的元素存在,包括null元素。LinkedList主要方法:peekFirst (E)用于获取双端列表头的数据之所以选择peekFirst而不选择getFirst的原因在于get方法中,如果获取数据为null的话则抛出异常,而...

2020-02-22 21:36:38 223

原创 直观打印二叉树

public class Code_02_PrintBinaryTree { public static class Node { public int value; public Node left; public Node right; public Node(int data) { thi...

2020-02-17 19:40:25 151

原创 桶排序及基数排序(bucketSort and RadixSort)代码分析

桶排序(bucketSort)代码分析:对于桶排序代码思路较为简单:1. 求出数列中的最大值2. 设计桶的数目等于最大值加一(因为是非负数数据,所以不存在无穷的情况,分析出最大值的情况下,数据最大能够达到的也就是max,最小为0)3. 将整数数据放入到桶中,此时数据一旦放入到桶中一次,则桶的计数加一(记录着这个桶中一共有多少个数据)4. 利用for循环将数据重新排列好赋值给arr,完成排...

2020-02-14 21:54:36 234

原创 生成对数器

// for test 绝对正确的方法,对于其他算法则在此处可以实现该绝对正确的算法public static void comparator(int[] arr) { Arrays.sort(arr);}// for test 用于产生任意的数组public static int[] generateRandomArray(int maxSize, int maxValue)...

2020-02-13 21:45:41 298

原创 堆排序代码及注释

冒泡排序冒泡排序本身其实没有什么必要理解的地方,整体思路是将最大的值依次遍历到最后的位置,从而实现整体数组的排序。public static void bubbelsort(int[] arr){ if(arr == null || arr.length<2){ return; } for(int e = arr.length-1;e>0;...

2020-02-13 21:18:14 157

原创 合并k个排序链表

合并k个排序链表,返回合并后的排序链表,具体查看力扣23题。解法一: 暴力解法,时间限制导致无法通过。思路就是通过比较两个链表中Node哪个小,小的则作为新建链表的下一个节点,并将指针挪到小的那个的下一个。相当于冒泡排序,复杂度很高。解法二:将解法一的思路进行改进,解法一之后比较是将新建号的链表和下一个链表进行比较,整体比较长度较大,解法二通过中分将左右两边分别进行比较,用到了归并排序的...

2020-02-12 17:49:58 155

原创 左神算法笔记(二十四)——扩展题目

题目一思路整体思路是形成一个双端队列,利用双端队列如果当前队列中的数值小于等于当前值,就向右方扩展,如果大于则将左边的数值去掉。之所以可以采用双指针在于数组中的数据全部都是正数,则指针增加则会增加,左指针增加则数据减少代码public static int getMaxLength(int[] arr,int k){ if(arr == null || arr.length == n...

2020-02-11 11:03:04 251

原创 左神算法笔记(十)——暴力递归改动态规划扩展

题目一暴力递归暴力递归的复杂度太高,中间存在很多的重复计算,比如0张200,2张100后面的情况跟1张200,0张100后面的情况数目相同,但是暴力递归不考虑这个问题,所以需要进行修改。public static int coins1(int[] arr,int aim){ if(arr == null || arr.length ==0 || aim <0){ return ...

2020-02-10 19:32:05 474 2

原创 左神算法笔记(九)——前缀树扩充

题目一给定一个数组,求子数组的最大异或和。一个数组的异或和为数组中所有的数异或起来的结果。思路之前做个一个找到异或和为0的最长子数组,思路是将每一个节点当做异或和的最后一个节点,求解最长的子数组。同样这个题目可以以这种方法解决。以i位置结尾的最大异或和的值,最大的异或和一定包含在其中。暴力解法就是从0-i,1-i,2-i。。。进行遍历,求解出以i为末尾的最大异或和的值,不断遍历,求出最后的...

2020-02-10 10:27:26 215

原创 左神算法笔记(二十三)——跳表

跳表可以认为同样包含key和value,可以完成任何红黑树包含的操作。同时代价也是O(logN)。但是底层不是数结构,比较魔性,但是也好实现。跳表思想:key包含多少层,不是由key本身决定的,而是随机的。随机函数只包含0和1,roll出1时最少层数确定,第几次roll出1,则系统最小有几层。数据插入:重新roll,得到该key的层数,此时从高层开始计算数据是否应该插入该位置,算得位置后,...

2020-02-09 22:10:30 428

原创 左神算法笔记(二十二)——字符串加减乘除计算

平时需要将容易出错的地方和边界条件都需要关注,在刷题的过程中需要将特殊情况进行标记,多积累特殊的情况,面试官询问对于算法如何检查之类的可以先回答比较器,同时需要回答需要关注的特殊情况和边界条件。字符串加减乘除实现思路整个式子分为两种情况:1. 没有括号:新建一个栈,将数字和符号都放到栈中,如果顶端的符号是+或者-,则此时可以放入数字,如果顶端字符是或者/,则此时将最后放入的或/和符号下的...

2020-02-09 20:17:16 1485

原创 左神算法笔记(二十一)——LFU缓存算法实现

LFU(Least Frequently Used):淘汰最近访问频率最小的元素。思路设计思路:两个双向链表,横向的双向链表用来统计访问频率,纵向的双向链表,没出现过的元素出现在横向链表的头结点上,如果一直增加没有访问,则将元素全部挂到头结点的下方,纵向形成双向链表。横向链表中统计访问的频率,如果增加某个节点的访问一次,则横向链表判断访问总次数是否存在,如果存在,则将节点放到该次数节点的下方...

2020-02-09 17:45:49 349

原创 左神算法笔记(二十)——LRU缓存算法实现

LRU思路准备两张表,一个哈希表,一个双向链表。假设A,3存入表中,则map中key还是原始的key,key=A,value加工一下,包括A和3.对于双向链表从尾部加,从头部出。如果需要将某个元素从拿出,则此时将需要拿出的元素拿出,放到链表的最后,此时,该元素优先级最高。如果缓存大小超过了k,此时将双向链表的头结点拿出,取出其中的key,使得原来map中删除该元素,将新的元素放入map中...

2020-02-09 15:49:20 443 1

原创 左神算法笔记(十九)——树型DP(动态规划)

题目一求整颗二叉树的最大搜索二叉子树逻辑:将整个题目转成以每个节点作为头的最大搜索二叉子树,最大的搜索二叉子树一定在其中。基本二叉树的题目都可以利用这样的思想进行求解。思路思路:当前节点的最大搜索子树可能来自于左子树的某个子树,右子树的某个子树,左子树是搜索二叉树,右子树也是搜索二叉树,并且左子树的最大值小于我,右子树的最小值大于我,则以我为头为整个搜索二叉子树主逻辑:对每个节点进...

2020-02-09 12:02:13 377

原创 左神算法笔记(十八)——平衡搜索二叉树

搜索二叉树搜索二叉树:对于搜索二叉树的任何一个节点,左子树的值都比节点小,右子树的值都比他大。TreeMap中,跟HashMap中一样可以提供key-value,同时会将key按照大小顺序排列。中间采用的就是搜索二叉树的知识。具备平衡性的搜索二叉树:AVL树——平衡性最严格任何一个节点的左子树和右子树高度差不大于1,复杂度还是O(logN)。导致调整非常频繁。红黑树——平衡性要求不严格...

2020-02-09 08:57:04 513

原创 左神算法笔记(十七)——morris遍历(二叉树)

原本二叉树算法中的痛点:二叉树之中,无论时间复杂度如何,空间复杂度为O(h),h为二叉树的高度。morris算法将二叉树的空间复杂度变为O(1),同时时间复杂度不变,依旧保持O(n)。算法流程:现在的当前节点记为cur,如果cur无左孩子,则cur向右移动,cur=cur.right如果cur有左孩子,则找到左子树上最右的节点,记为mostright1)如果mostright的右指针...

2020-02-08 11:51:34 431

原创 左神算法笔记(十六)——单调栈结构

单调栈解决的问题单调栈解决的问题是在一个数组中想知道所有数中,左边离他近的比他大的和右边离他近的比他大的数思考的问题:如果知道所有数上得到上述要求,同时复杂度满足O(N)。单调栈结构:单调栈内,从栈底到栈顶满足从大到小。例如:5(0)4(1)3(2)6(3)后面括号代表所属位置入栈的过程:5(0)压入栈然后4(1)比5(0)小,所以将4(1)压入栈中 第三步因为3(2)比4(1)小,...

2020-02-07 22:03:49 613

原创 左神算法笔记(十五)——窗口

窗口概念本身并不难理解,窗口从左向右滑动,窗口本身相当于一个固定长度的窗子,依次向右边滑动,从而在中间会有左边减值,右边增加值。窗口内最大值的求解双端队列,代价都是O(1),不需要这个结构表示第几个数是最大值,只需要双端队列可以依次增加或减少数值。双端队列中每次保存两个值,当前的数值和当前的位置信息。加数的逻辑:每次小的值从右边进入双端队列,整个队列形成从大到小排列的顺序。如果...

2020-02-07 16:32:08 286

原创 左神算法笔记(十四)——BFPRT算法

解决的问题:在一个无序数组中找到第k小的数快排解法:随机选择一个数,利用荷兰国旗问题,将数据分为小于等于大于三块利用区分好的数组计算长度,看是否命中,否则看是在哪个块中,在确定块中继续划分,重新回到1。对于这种解法而言,如果最差情况是O(N^2),一般情况下,用master公式计算出,最好是O(N)。最后的数学期望是O(N)。暴力解法:将整个数组全排列,形成一个有序数组,然后再找到...

2020-02-07 11:59:46 442 1

原创 左神算法笔记(十三)——Manacher算法

在一个字符串中找到最长的回文字符串以每个位置作为中心,向两边扩展,可以确定奇回文,但是偶回文无法这样做。解决方法:在字符串中间及两边插入某种字符,此时可以按照这种方法进行扩展。此时无论奇回文还是偶回文都可以找到。例如11211,此时添加任意字符在两边#1#1#2#1#1#此时均可以进行回文判断。补充概念:回文直径:以一个位置为中心,扩出来整个串的长度为回文直径回文半径:以一个位置为中心...

2020-02-07 10:30:04 395

原创 左神算法笔记(十二)——KMP算法

KMP算法详解与应用解决原始问题:str1和str2为两个字符串,其中str1中的某个子串是否等于str2.明确定义子序列可以不连续,子串/子数组一定是连续的。(中间可能会出现混用情况,必须要区分清楚)getIndexOf(str1,str2)就是str2是否包含在str1中,包含返回true,不包含返回false。中间其实就采用了KMP算法。暴力算法:将str1从最开始的位置开始配,如果...

2020-02-06 21:50:29 507

原创 左神算法笔记(十)——递归和动态规划

递归和动态规划介绍求n!的结果

2020-02-06 10:55:30 373

左神算法基础及进阶代码

该资源为左神算法课堂的代码,包括基础代码和进阶代码两块内容。其中包括左神上课所用的ppt及ppt中的代码,代码非常详细,适合跟左神的算法视频配套使用,单独使用也可以,可以自己分析代码逻辑。

2020-02-01

空空如也

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

TA关注的人

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