自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

转载 【无标题】

常用算法

2023-01-07 21:08:35 108

原创 二进制的运用

将二进制的最后一个1变为0例如x = 6,二进制 110x -1 = 5,二进制 101x & (x-1) ,结果为 100,将x的最后一个1 转换成了0运用场景:计算二进制中,1的个数func CountBits(n int) int { res := 0 for i := n; i > 0; i &= (i - 1) { res += 1 } println(res) return res}...

2022-02-24 18:42:12 241

原创 2021-07-22 有限自动状态机示例

有限自动状态机说明大多数介绍有限自动状态机的帖子都是写了原理,那这个原理怎么落地呢。我找了一个简单易于理解的示例写一下。说明有限自动机有3个部分:1,当前状态,2,当前输入,3,当前状态对应的当前输入,所应该执行的操作。其中,3会产生一个新的状态1。对应一个新的输入2。从而实现循环举例:一个状态:[x,y]。 初始状态为 [1,0]对应的输入:A,BA对应的操作:产生新的状态 [2 * x + y,y ]B对应的操作:产生新的状态 [x, 2 * y + x]图示如下:

2021-07-22 14:17:50 222

原创 算法:连续子数组的长度

题目:给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组,并返回该子数组的长度。要求:0和1在子数组中连续例如:nums = [0,1]输出 2nums = [0,1,0]返回 2nums = [0,0,1,1,0,1]返回 4解法:class Solution { // 子数组中的0,1要求连续 public int findMaxLength1(int[] nums) { int num1 = 0; // 前1个

2021-06-03 17:35:55 304

原创 连续的子数组和

题目:给你一个整数数组 nums 和一个整数 k ,编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组:子数组大小 至少为 2 ,且子数组元素总和为 k 的倍数。如果存在,返回 true ;否则,返回 false 。如果存在一个整数 n ,令整数 x 符合 x = n * k ,则称 x 是 k 的一个倍数。解法:递归遍历(时间复杂度高,但递归这种基本操作还是要熟练掌握的)代码:(我刚开始一直写错,原因是没注意到子数组要是连续的)class Solution { pu

2021-06-02 19:36:53 192

原创 python 多进程,日志切割,导致日志跳跃输出的问题。

python 多进程,日志切割,导致日志跳跃输出的问题。问题描述:Django下启用 TimedRotatingFileHandler ,按天切割日志。设置如下:'handlers': { 'mail_admins': { 'level': 'ERROR', 'class': 'django.utils.log.AdminEmailHandler', 'include_html': True, }

2021-05-27 18:34:15 375

原创 root is not allowed to impersonate hadoop

hive远程连接提示:org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationExceptionUser: root is not allowed to impersonate admin解决办法:(两个都要加)在 core-site.xml中加入 <property> <name>hadoop.proxyuser.root.hosts&

2021-04-13 20:07:05 847 1

原创 django多数据库router源码

首先router的使用:django的多数据库,需要经过 router 进行分流。router的配置如下,首先是 router 类:db_routers.pyclass MyDBrouter(): def db_for_read(self, model, **hints): if model._meta.app_label == 'goods': return 'goods' else: return 'defau

2021-03-09 16:46:15 299

原创 PdfReader 2:this.readPdf() -5 60 DIC、array 类型

{ # 如果ch==60,< case 60: # 下一个字符,如果还是60,则说明还是 字典的< ,否则就是内部的字符串 v1 = this.file.read(); if (v1 == 60) { this.type = PRTokeniser.TokenType.START_DIC; } else { outBuf = new StringBuffer();

2021-01-30 15:40:59 189

原创 PdfReader 2:this.readPdf() -4 PdfName

代码如下:public class PdfName extends PdfObject implements Comparable<PdfName> { ... public static final PdfName IMAGE = new PdfName("Image"); ... //很多的pdfname 对象 public static Map<String, PdfName> staticNames; // 静态变量,用于存储所有的静态名称 priva

2021-01-25 20:38:44 659

原创 PdfReader 2:this.readPdf() -3 name类型

case47 就是 name 类型。在分析 case47 之前,先了解一下name类型。PdfName 类型{ case 47: outBuf = new StringBuffer(); this.type = PRTokeniser.TokenType.NAME; while(true){ ch = this.file.read(); if(delims[ch +1]) { this.backOnePosition(ch); break; } i

2021-01-24 14:22:08 116

原创 PdfReader 2:this.readPdf() - 2:字符串类型

这一篇来分析 case 40,也就是 pdf 的字符串类型,以 ( 开头,以)结尾。1,先回忆一下状态机算法:switch (变量a):case 状态1:变量a = 某某某1;case 状态2:变量a = 某某某2;然后看代码:看大结构:{ while(true){ // 获取复合条件的ch while(true){ //...... } if (v1 == -1){ break; } // 将ch放入buf outBuf.append((char)

2021-01-22 14:35:51 158 1

原创 PdfReader 2:this.readPdf() - 1;

pdfreader 的主要部分package com.itextpdf.text.pdfpublic class PdfReader implements PdfViewerPreferences {// 这个方法里面有很多对象 protected void readPdf() throws IOException { try { this.fileLength = this.tokens.getFile().length(); // 这个token 就

2021-01-19 19:46:42 354

原创 PdfReader 1:this.tokens = new PRTokeniser(filename);

这个过程,其实就是打开pdf文件,并映射到内存package com.itextpdf.text.pdf;public class PRTokeniser { public PRTokeniser(String filename) throws IOException { this.file = new RandomAccessFileOrArray(filename); // 所以,最终文件存于 file.rf.mappedByteBuffer }}pack

2021-01-15 20:01:13 215

原创 PDF解析:目录(itextpdf)

想要读懂 itextpdf 的源代码,要多调试,对整个代码的脉络掌握个大概,形成一个目录,再分析细节。所以我的目录其实是这个源码的流程轨迹1,先要读取pdfpublic class PdfReader implements PdfViewerPreferences{ public PdfReader(String filename) throws IOException { this((String)filename, (byte[])null); } publi

2021-01-15 19:59:40 681 1

原创 算法:单词规律

题目给定一种规律 pattern 和一个字符串 str ,判断 str 是否遵循相同的规律。这里的 遵循 指完全匹配,例如, pattern 里的每个字母和字符串 str 中的每个非空单词之间存在着双向连接的对应规律。示例1:输入: pattern = “abba”, str = “dog cat cat dog”输出: true分析其实就是对应位置,pattern 对应位置的字符相同,则 str 对应位置的字符串也相同。代码class Solution { public bool

2020-12-16 20:38:20 120

原创 算法:字母异位词分组

题目给定一个字符串数组,将字母异位词组合在一起。字母异位词指字母相同,但排列不同的字符串。示例:输入: [“eat”, “tea”, “tan”, “ate”, “nat”, “bat”]输出:[[“ate”,“eat”,“tea”],[“nat”,“tan”],[“bat”]]本题很明显是用 hash 来实现的。只是怎么做可能有一点点绕吧String 转为 char[]排序,再转为string将结果作为 map 的key, 转换前的 string 放入 list中,作为 ma

2020-12-14 20:32:50 99

转载 算法:649. Dota2 参议院

题目Dota2 的世界里有两个阵营:Radiant(天辉)和 Dire(夜魇)Dota2 参议院由来自两派的参议员组成。现在参议院希望对一个 Dota2 游戏里的改变作出决定。他们以一个基于轮为过程的投票进行。在每一轮中,每一位参议员都可以行使两项权利中的一项:禁止一名参议员的权利:参议员可以让另一位参议员在这一轮和随后的几轮中丧失所有的权利。宣布胜利: 如果参议员发现有权利投票的参议员都是同一个阵营的,他可以宣布胜利并决定在游戏中的有关变化。给定一个字符串代表每个参议员的阵营。字

2020-12-11 21:00:58 79 1

原创 算法:柠檬水找零

题目在柠檬水摊上,每一杯柠檬水的售价为 5 美元。顾客排队购买你的产品,(按账单 bills 支付的顺序)一次购买一杯。每位顾客只买一杯柠檬水,然后向你付 5 美元、10 美元或 20 美元。你必须给每个顾客正确找零,也就是说净交易是每位顾客向你支付 5 美元。注意,一开始你手头没有任何零钱。如果你能给每位顾客正确找零,返回 true ,否则返回 false 。输入:[5,5,5,10,20]输出:true解释:前 3 位顾客那里,我们按顺序收取 3 张 5 美元的钞票。第 4 位顾客那

2020-12-10 21:39:22 142

原创 算法:相同的树

题目给定两个二叉树,编写一个函数来检验它们是否相同。遍历即可,左边的树左边的树,右边的树右边的树,如果不相等则返回false。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val = v

2020-12-08 20:30:29 80

原创 方法:vue下载pdf ,不预览直接下载

vue下载pdf ,不预览直接下载 // 下载文件 downloadfun(file_name,file_path){ console.log(file_name) var ajax=new XMLHttpRequest(); ajax.open( "GET", file_path, true); ajax.setRequestHeader("Cache-Control","no-cache") ajax.setRequestHea

2020-12-08 15:19:52 4702 3

原创 算法:杨辉三角

题目根据数字 numRows, 生成 numRows 行的杨辉三角[[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1],]思路,杨辉三角只有第一行和第二行比较特殊,其他行都是1…1,中间由上一行的两个数相加获得。代码class Solution { public List<List<Integer>> generate(int numRows) { LinkedList<List<Integer&

2020-12-06 22:33:30 134

转载 算法:分割数组为连续子序列

题目leetcode659https://leetcode-cn.com/problems/split-array-into-consecutive-subsequences/给你一个按升序排序的整数数组 num(可能包含重复数字),请你将它们分割成一个或多个子序列,其中每个子序列都由连续整数组成且长度至少为 3 。如果可以完成上述分割,则返回 true ;否则,返回 false 。示例 1:输入: [1,2,3,3,4,5]输出: True解释:你可以分割出这样两个连续子序列 :

2020-12-05 00:35:02 196

原创 算法:计数质数的数量

题目统计所有小于非负整数 n 的质数的数量。思路质数的百度解释:质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。创建一个数组,长度为n,填充为1.首先2是质数,从2开始,2的所有倍数都标记为0然后计算下一个,3,将3的所有倍数都标记为0重复上述步骤最后统计数组中,从下标为2开始,统计 1 的数量即可代码class Solution { public int countPrimes(int n) { int[] isPrime = new i

2020-12-03 20:44:08 251

原创 算法:在排序数组中查找元素的第一个和最后一个位置

题目给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。如果数组中不存在目标值 target,返回 [-1, -1]。代码class Solution { public int[] searchRange(int[] nums, int target) { // 初始化返回值 int[] res = new int[]{-1,-1}; int count=0; // 这个count代

2020-12-02 23:21:28 250

原创 算法:上升下降字符串

连着熬了几个夜上线,实在没时间过来,今天终于上去了题目给你一个字符串 s ,请你根据下面的算法重新构造字符串:从 s 中选出 最小 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最小 的字符,且该字符比上一个添加的字符大,将它 接在 结果字符串后面。重复步骤 2 ,直到你没法从 s 中选择字符。从 s 中选出 最大 的字符,将它 接在 结果字符串的后面。从 s 剩余字符中选出 最大 的字符,且该字符比上一个添加的字符小,将它 接在 结果字符串后面。重复步骤 5 ,直到你没法从

2020-11-26 17:49:03 92

原创 算法:有效的字母异位词

题目判断两个字符串s和t,是不是字母异位词。字符串只包含小写字母也就是说,s的所有字母和t都一样,只是位置不同。例如:输入: s = “anagram”, t = “nagaram”输出: true解题这道题呢,就相对简单些了。因为题目中说了字符串都是小写字母,那就可以用26个字母的数组来存放字符串的每个字母。新建数组 hex ,长度为26.1,遍历s,对应hex每个字符位置,+12,遍历t,对应hex每个字符位置,-13,遍历hex,判断是不是都为0,只要不是就返回false代码

2020-11-22 16:23:31 104

原创 算法:排序链表:归并排序

题目:给定链表的头结点 head ,请将其按 升序 排列并返回 排序后的链表 。head = [4,2,1,3]输出:[1,2,3,4]解题1,最简单的算法,就是挨个遍历链表,将其加入数组,通过数组排序。但这样的空间复杂度比较高。2,我们学过归并排序。那就用归并排序来解题。概念:归并排序就是有 n 个数字:2,4,1,5,3…先两个两个的排序,再两组两组的排序。代码/** * Definition for singly-linked list. * public class Lis

2020-11-21 19:16:21 166 1

原创 算法:移动零

题目给定一个数组 nums,编写一个函数将所有 0 移动到数组的末尾,同时保持非零元素的相对顺序。示例:输入: [0,1,0,3,12]输出: [1,3,12,0,0]代码class Solution { public void moveZeroes(int[] nums) { int i=0; int len=nums.length; while(i<len){ if (nums[i]==0){

2020-11-19 18:16:10 77

原创 前端:几个拖拽控件

想要做拖拽类的界面。可以写原生drag,但比较麻烦,最简单的方法肯定是找几个已经写好的组件。找了一下,vue的几个拖拽组件如下:1,vue-drag-resizegit 星数: 871特点:可以随意拖拽位置、改变大小。2,vue-slicksortgit 星数:9413, awe-dnd不在git 上4, vuedraggablegit 星数:13.5k5, vue-grid-layoutgit 星数:4.2k这几个都是通过列表中的数据来拖拽,但不能实现缩放和随意变换位置的功能。

2020-11-18 20:46:06 2729

转载 算法:根据身高重建队列

题目:假设有打乱顺序的一群人站成一个队列。 每个人由一个整数对(h, k)表示,其中h是这个人的身高,k是排在这个人前面且身高大于或等于h的人数。 编写一个算法来重建这个队列。注意:总人数少于1100人。示例输入:[[7,0], [4,4], [7,1], [5,0], [6,1], [5,2]]输出:[[5,0], [7,0], [5,2], [6,1], [4,4], [7,1]]不会做的时候,先看看答案,对着答案画个图,也可以懂代码class Solution { pub

2020-11-16 20:47:03 61

原创 算法:数组的相对排序

题目给你两个数组,arr1 和 arr2,arr2 中的元素各不相同arr2 中的每个元素都出现在 arr1 中对 arr1 中的元素进行排序,使 arr1 中项的相对顺序和 arr2 中的相对顺序相同。未在 arr2 中出现过的元素需要按照升序放在 arr1 的末尾。解题int 数组排序可以用自定义排序函数的方式来实现此处对于自定义函数中,需要比较的两个对象t1、t2有4种情况。1,t1 和 t2 都在 arr2中2,t1 和 t2 都不在arr2中3,t1 在 arr2 中,t2不在

2020-11-14 15:08:17 222

原创 算法:奇偶链表

题目给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。思路其实就是调换单链表的顺序,把所有奇数节点放在前面,偶数节点放在后面代码/** * Definition for singly-linked list. * public class ListNode { * int val

2020-11-13 18:43:13 86

转载 算法:leetcode 514 自由之路

题目视频游戏“辐射4”中,任务“通向自由”要求玩家到达名为“Freedom Trail Ring”的金属表盘,并使用表盘拼写特定关键词才能开门。给定一个字符串 ring,表示刻在外环上的编码;给定另一个字符串 key,表示需要拼写的关键词。您需要算出能够拼写关键词中所有字符的最少步数。最初,ring 的第一个字符与12:00方向对齐。您需要顺时针或逆时针旋转 ring 以使 key 的一个字符在 12:00 方向对齐,然后按下中心按钮,以此逐个拼写完 key 中的所有字符。旋转 ring 拼出 ke

2020-11-12 20:54:29 79

转载 算法:leetcode31. 下一个排列

会就偷着乐,不会就赶紧看看答案学起来,要不然做题干啥题目实现获取下一个排列的函数,算法需要将给定数字序列重新排列成字典序中下一个更大的排列。如果不存在下一个更大的排列,则将数字重新排列成最小的排列(即升序排列)。必须原地修改,只允许使用额外常数空间。以下是一些例子,输入位于左侧列,其相应输出位于右侧列。1,2,3 → 1,3,23,2,1 → 1,2,31,1,5 → 1,5,1过程本来还以为有啥技巧,想了半天没想到,一看答案,原来就是死算~……class Solution {

2020-11-10 20:41:15 47

原创 算法:最接近原点的 K 个点

题目我们有一个由平面上的点组成的列表 points。需要从中找出 K 个距离原点 (0, 0) 最近的点。(这里,平面上两点之间的距离是欧几里德距离。)例如:输入:points = [[1,3],[-2,2]], K = 1输出:[[-2,2]]分析如题也就是说,求出前K个离 (0,0)最近的点。那就要排序。距离如何排序?先用勾股定理求出距离。ok,思路好了,接下来就是代码class Solution { public int[][] kClosest(int[][] poin

2020-11-09 18:58:47 539

原创 算法:根据数字二进制下 1 的数目排序

题目给你一个整数数组 arr 。请你将数组中的元素按照其二进制表示中数字 1 的数目升序排序。如果存在多个数字二进制中 1 的数目相同,则必须将它们按照数值大小升序排列。请你返回排序后的数组。思路本题首先要将数字转变为二进制,然后再统计二进制中的1的数量。如果1的数量相同,则按数值的大小排列。所以本题的关键在于compare的重写代码class Solution { public int[] sortByBits(int[] arr) { Integer[] new

2020-11-07 17:55:26 290

原创 算法:插入区间

题目给出一个无重叠的 ,按照区间起始端点排序的区间列表。在列表中插入一个新的区间,你需要确保列表中的区间仍然有序且不重叠(如果重叠,则合并区间)。示例 1:输入:intervals = [[1,3],[6,9]], newInterval = [2,5]输出:[[1,5],[6,9]]思路1,先写一个方法,用于判断两个数组是否重叠,如果重叠,则返回合并后的数组。否则,返回哪个数组2相对于数组1 的位置。2,遍历二维数组,依次判断是否与数组2重叠,以及重叠的位置。直到没有重叠的位置。同时,将

2020-11-04 14:11:11 257

原创 算法:有效的山脉数组

题目:给定一个整数数组 A,如果它是有效的山脉数组就返回 true,否则返回 false。解释:就是说,数组A先递增,后递减。不可有相等的部分。思路:1,找出数组中的最大值2,0-最大值:递增3,最大值-数组结束:递减否则,返回falseclass Solution { public boolean validMountainArray(int[] A) { int a = 0; int index = 0; boolean res =

2020-11-03 22:27:22 157

原创 算法:求两个数组的交集

思路1,将两个数组分别排序2,同时遍历两个数组,将相同的数字放入set 集合3,将set 集合转换为 数组代码class Solution { public int[] intersection(int[] nums1, int[] nums2) { LinkedHashSet<Integer> res_set = new LinkedHashSet<Integer>(); Arrays.sort(nums1); Ar

2020-11-02 17:32:33 680

空空如也

空空如也

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

TA关注的人

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