- 博客(61)
- 资源 (16)
- 收藏
- 关注
原创 关联规则挖掘算法: Aprior算法和Fpgrowth算法
关联规则挖掘的目的是挖掘不同物品(item)之前的相关性,啤酒和尿布的故事就是一个典型的成功例子。关联规则挖掘思想简单高效,在广告推荐领域也有较多的应用,主要用于推荐模型落地前的流量探索以及构建规则引擎探寻高价值流量等。本文主要介绍关联规则挖掘常用的两种算法,即Aprior算法和Fpgrowth算法。
2022-12-22 15:42:17
1960
1
原创 linux普通用户配置自己的python环境
最近入职之后,带我的导师给我安排了一个活,要搭建一个ucloud2bigquery的数据pipline,理所当然的要用到服务器,于是乎,踩了好多好多坑,害。 公司给的服务器是linux系统,centos版本。我实现这个pipline打算用python3,但是root的python环境是2.x,因此需要自己装环境。强调:如果不是非得用crontab跑脚本,只是开发的话,不建议自己去配,你都不知道会遇到什么问题,需要去装一个anaconda就一些都解决了1. linux安装anaconda 这里
2022-03-18 11:46:47
3014
1
原创 leetcode刷题日记-leetcode刷题日记-71. 简化路径
题目描述:给你一个整数数组 nums ,判断这个数组中是否存在长度为 3 的递增子序列。如果存在这样的三元组下标 (i, j, k) 且满足 i < j < k ,使得 nums[i] < nums[j] < nums[k] ,返回 true ;否则,返回 false 。示例:输入:nums = [1,2,3,4,5]输出:true解释:任何 i < j < k 的三元组都满足题意输入:nums = [5,4,3,2,1]输出:false解...
2022-01-12 10:13:13
466
2
原创 leetcode刷题日记-71. 简化路径
题目描述:给你一个字符串 path ,表示指向某一文件或目录的 Unix 风格 绝对路径 (以 ‘/’ 开头),请你将其转化为更加简洁的规范路径。在 Unix 风格的文件系统中,一个点(.)表示当前目录本身;此外,两个点 (…) 表示将目录切换到上一级(指向父目录);两者都可以是复杂相对路径的组成部分。任意多个连续的斜杠(即,’//’)都被视为单个斜杠 ‘/’ 。 对于此问题,任何其他格式的点(例如,’…’)均被视为文件/目录名称。请注意,返回的 规范路径 必须遵循下述格式:1.始终以斜杠 ‘...
2022-01-06 09:13:42
261
原创 leetcode刷题日记-846. 一手顺子
题目描述:Alice 手中有一把牌,她想要重新排列这些牌,分成若干组,使每一组的牌数都是 groupSize ,并且由 groupSize 张连续的牌组成。给你一个整数数组 hand 其中 hand[i] 是写在第 i 张牌,和一个整数 groupSize 。如果她可能重新排列这些牌,返回 true ;否则,返回 false 。示例:输入:hand = [1,2,3,6,2,3,4,7,8], groupSize = 3输出:true解释:Alice 手中的牌可以被重新排列为 [1...
2021-12-30 09:43:17
461
原创 leetcode刷题日记-1995. 统计特殊四元组
题目描述:给你一个 下标从 0 开始 的整数数组 nums ,返回满足下述条件的 不同 四元组 (a, b, c, d) 的 数目 :nums[a] + nums[b] + nums[c] == nums[d] ,且a < b < c < d示例:输入:nums = [1,2,3,6]输出:1解释:满足要求的唯一一个四元组是 (0, 1, 2, 3) 因为 1 + 2 + 3 == 6输入:nums = [3,3,6,4,5]输出:0解释:[3,3,...
2021-12-29 09:40:45
727
原创 leetcode刷题日记-472. 连接词
题目描述:给你一个 不含重复 单词的字符串数组 words ,请你找出并返回 words 中的所有 连接词 。连接词 定义为:一个完全由给定数组中的至少两个较短单词组成的字符串。示例:输入:words = [“cat”,“cats”,“catsdogcats”,“dog”,“dogcatsdog”,“hippopotamuses”,“rat”,“ratcatdogcat”]输出:[“catsdogcats”,“dogcatsdog”,“ratcatdogcat”]解释:“catsd...
2021-12-28 17:12:03
391
原创 Rabin-Karp算法详解和实现(python)
Rabin-Karp算法总的来说,一句话可以概况,就是一种利用对字符串进行哈希(hash)来解决字符串匹配问题的算法。所以该算法的特点就呼之欲出了,如何对字符串进行hash呢? 这里首先对字符串匹配问题做一个简单的概述。字符串匹配问题可以简单描述成下述形式:Input:一段字符串t,和一个字符串pOutput:如果t中含有p,那么输出yes,如果没有,输出no什么是Hash 那么最重要的问题来了,如何对字符串进行hash呢?首先我们需要明白hash的含义,hash的含义就是通过
2021-12-28 09:10:31
4076
6
原创 leetcode刷题日记-825. 适龄的朋友
题目描述:在社交媒体网站上有 n 个用户。给你一个整数数组 ages ,其中 ages[i] 是第 i 个用户的年龄。如果下述任意一个条件为真,那么用户 x 将不会向用户 y(x != y)发送好友请求:age[y] <= 0.5 * age[x] + 7age[y] > age[x]age[y] > 100 && age[x] < 100否则,x 将会向 y 发送一条好友请求。注意,如果 x 向 y 发送一条好友请求,y 不必也向 x 发送一条好...
2021-12-27 10:20:37
442
原创 leetcode刷题日记-1044. 最长重复子串
题目描述:给你一个字符串 s ,考虑其所有重复子串 :即,s 的连续子串,在 s 中出现 2 次或更多次。这些出现之间可能存在重叠。返回 任意一个 具有最长长度的重复子串。如果 s 不含重复子串,那么答案为 “” 。示例:输入:s = “banana”输出:“ana”输入:s = “abcd”输出:""2 <= s.length <= 3 * 104s 由小写英文字母组成解析,这道题目的难度指数为困难,也确实很难,考的知识点很多,但是其实每个知识点都不难,...
2021-12-24 08:53:54
1060
原创 leetcode刷题日记- 重复叠加字符串匹配
题目描述:给定两个字符串 a 和 b,寻找重复叠加字符串 a 的最小次数,使得字符串 b 成为叠加后的字符串 a 的子串,如果不存在则返回 -1。注意:字符串 “abc” 重复叠加 0 次是 “”,重复叠加 1 次是 “abc”,重复叠加 2 次是 “abcabc”。示例:-输入:a = “abcd”, b = “cdabcdab”输出:3解释:a 重复叠加三遍后为 “abcdabcdabcd”, 此时 b 是其子串。输入:a = “abcd”, b = “cdabcdab”输.
2021-12-22 09:31:00
796
原创 leetcode刷题日记-供暖器
题目描述:冬季已经来临。 你的任务是设计一个有固定加热半径的供暖器向所有房屋供暖。在加热器的加热半径范围内的每个房屋都可以获得供暖。现在,给出位于一条水平线上的房屋 houses 和供暖器 heaters 的位置,请你找出并返回可以覆盖所有房屋的最小加热半径。说明:所有供暖器都遵循你的半径标准,加热的半径也一样。示例:输入: houses = [1,2,3], heaters = [2]输出: 1解释: 仅在位置2上有一个供暖器。如果我们将加热半径设为1,那么所有房屋就都能..
2021-12-20 10:07:37
426
原创 排序算法专题-基数排序
基数排序也是一种基于桶的排序算法,原理是将整数按位数切割成不同的数字,然后按每个位数分别比较,当所有位比较完成之后,排序完成。大致过程如下如:图像来源:【算法】排序算法之基数排序 这个算法原理还是很简单的,问题是如何来有效的来实现这个算法。这个算法有两种实现方式,即MSD和LSDMSD:先从高位开始进行排序,在每个关键字上,可采用计数排序LSD:先从低位开始进行排序,在每个关键字上,可采用桶排序 总结一下目前的三种桶原理排序方法:基数排序:根据键值的每位数字来分配桶计数排序
2021-12-18 10:12:55
928
原创 排序算法专题-桶排序
计数排序其实本质上就是一种桶,只不过每个桶对应一个数值,可以理解为桶排序的一种最原始情况,而桶排序是计数排序的升级版,他的桶对应是一个映射区间,而不是一个值,如下图:图片来源:桶排序 而后在桶内完成排序,最后将各个桶连接起来,完成排序。该算法很容易理解,但是其高效与否取决于两个部分,一个是映射空间的划定,最好的情况是n个数组均匀的划分到k个桶中,最坏的情况是输入的数组分配到了同一个桶中;第二个是桶内排序算法的选择,本文基于python的内置是Timsort排序算法实现,Timsort排序算法以
2021-12-17 11:04:43
650
原创 排序算法专题-计数排序
计数排序是一种在数值小于100以内十分高效的排序算法,时间复杂度为O(n),原理十分简单,是一个桶的简单运用(后面有机会再详细介绍介绍桶)。比如我们排序元素的数值分布在1-100,那么首先遍历一遍数组,记录1-100每个数值出现的个数,比如1,10,1,12,那么1出现了2次,10出现了1次,12出现了1次。就这样,两次O(n)时间复杂度的遍历就可以完成排序,这种只适用于数组最大值和最小值差值不大的情况,这种情况效率很高,但是如果差值较大,时间和空间开销都很高。算法步骤:(1)找出待排序的数组
2021-12-16 18:17:45
530
原创 排序算法专题-堆排序
堆排序,顾名思义,就是一种基于堆这种数据结构来实现排序的一种算法,那么何谓堆呢?简单点说,堆是一个近似完全二叉树的结构,同时满足即子结点的键值或索引总是小于(或者大于)它的父节点,由此而生,堆分为两种,分别是小顶堆和大顶堆。大顶堆:每个节点的值都大于或等于其子节点的值,在堆排序算法中用于升序排列小顶堆:每个节点的值都小于或等于其子节点的值,在堆排序算法中用于降序排列 从定义和特征上来看,堆排序的主要步骤就是构建一个堆,然后每次从堆里面取出最大(最小)的数来交换堆最后一个元素,知道堆的尺寸为1,
2021-12-15 16:14:22
777
原创 leetcode刷题日记-喧闹和富有
题目描述:有一组 n 个人作为实验对象,从 0 到 n - 1 编号,其中每个人都有不同数目的钱,以及不同程度的安静值(quietness)。为了方便起见,我们将编号为 x 的人简称为 "person x "。给你一个数组 richer ,其中 richer[i] = [ai, bi] 表示 person ai 比 person bi 更有钱。另给你一个整数数组 quiet ,其中 quiet[i] 是 person i 的安静值。richer 中所给出的数据 逻辑自恰(也就是说,在 pers..
2021-12-15 10:38:34
144
原创 leetcode刷题日记-课程表 III
题目描述:这里有 n 门不同的在线课程,按从 1 到 n 编号。给你一个数组 courses ,其中 courses[i] = [durationi, lastDayi] 表示第 i 门课将会 持续 上 durationi 天课,并且必须在不晚于 lastDayi 的时候完成。你的学期从第 1 天开始。且不能同时修读两门及两门以上的课程。返回你最多可以修读的课程数目。示例:输入:courses = [[100, 200], [200, 1300], [1000, 1250], [20.
2021-12-14 15:54:52
238
原创 排序算法专题-快速排序
快速排序是冒泡排序算法基础上改进的进阶版排序算法,他使用分治法把一个序列基于一个基准分成两个子序列,比如left均小于基准,right均大于基准,通过再次选择基准对left和right序列进行递归的划分,直到划分的数组长度为1或者0,由于划分依据是在序列中选择一个基准,即每次迭代至少有一个元素(基准)是放到了正确的而位置,所以这个算法一定会结束。算法步骤:1:从数列中挑出一个元素,称为 “基准”(pivot);2:重新排序数列,所有元素比基准值小的摆放在基准前面,所有元素比基准值大的摆在基准
2021-12-14 11:15:58
1303
原创 快速幂问题详解
本文讲讲快速幂问题,之前在一篇超级次方的博客简单提到过,链接如下。但是没有深入讲讲,只是简单介绍了一下快速幂的思想。leetcode刷题日记- 超级次方 快速幂的思想是分治,在超级次方一文里面的分治是按不同的位数来进行分治,比如我们要算5234的值,如果我们直接算234个5相乘,计算次数是很多的,是235次,但是我们可以采用分治的思想,比如234可以拆解成2100+310+4,那么5234=52*100+3*10+4=52*100*53*10*54,这样幂的次数就降低了很多,关于原来的式子还可
2021-12-14 09:15:13
1219
原创 leetcode刷题日记-保持城市天际线
题目描述:在二维数组grid中,grid[i][j]代表位于某处的建筑物的高度。 我们被允许增加任何数量(不同建筑物的数量可能不同)的建筑物的高度。 高度 0 也被认为是建筑物。最后,从新数组的所有四个方向(即顶部,底部,左侧和右侧)观看的“天际线”必须与原始数组的天际线相同。 城市的天际线是从远处观看时,由所有建筑物形成的矩形的外部轮廓。 请看下面的例子。建筑物高度可以增加的最大总和是多少?示例:例子:输入: grid = [[3,0,8,4],[2,4,5,7],[9,..
2021-12-13 11:47:22
148
原创 排序算法专题-归并排序
归并排序是一种十分经典的冲破O(n2)时间复杂度的排序算法,该算法是基于分治的思想,讲解算法原理之前,先看一下下面一张图。图片来源:【算法】排序算法之归并排序 上图就是归并算法的一个简单示例。该算法就是每次将数组递归拆解为两部分,直到所有部分包含元素为1,之后递归的将各个部分进行归并。具体的算法步骤如下:1:递归拆解数组,直到每个区块包含元素数量为12:归并数组,直到归并后的数组长度等于原数组长度3: 申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列4:设定两
2021-12-13 11:07:44
1049
原创 leetcode刷题日记-转换成小写字母
题目描述:给你一个字符串 s ,将该字符串中的大写字母转换成相同的小写字母,返回新的字符串。示例:输入:s = “Hello”输出:“hello”输入:s = “LOVELY”输出:“lovely”题目解析,这是一个灰常简单的题目,准确的说一句代码就能完事,如下:class Solution: def toLowerCase(self, s: str) -> str: return s.lower() 那么我为什么还要记下这个题目呢,因为这个.
2021-12-13 08:26:48
958
原创 leetcode刷题日记-在线选举
题目描述:给你两个整数数组 persons 和 times 。在选举中,第 i 张票是在时刻为 times[i] 时投给候选人 persons[i] 的。对于发生在时刻 t 的每个查询,需要找出在 t 时刻在选举中领先的候选人的编号。在 t 时刻投出的选票也将被计入我们的查询之中。在平局的情况下,最近获得投票的候选人将会获胜。实现 TopVotedCandidate 类:TopVotedCandidate(int[] persons, int[] times) 使用 persons 和 time.
2021-12-11 11:12:00
270
原创 排序算法专题-希尔排序
希尔排序也叫递减增量排序,是第一批冲破O(n2)的算法之一,他的算法思想很简单,首先拟定一个增量gap,一般是从len(nums)//3或者len(nums)//2开始,然后对序列nums[i,i+gap,i+gap*k…]进行插入排序,一轮迭代完成后gap=gap//2,知道gao=1是,排序完成。算法步骤是:1:选择一个增量序列 t1,t2,……,tk,其中 ti > tj, tk = 1;:2:按增量序列个数 k,对序列进行 k 趟排序;2:每趟排序,根据对应的增量 ti,将待排序列
2021-12-10 09:08:22
845
原创 排序算法专题-插入排序
插入排序是一种在原理上十分简单的算法,就跟打扑克牌一样,握在手里的是有序数列,每获得一张新牌,就插入有序数列中合适的位置。算法步骤:1:将数组第一个元素是为有序数列,第二个元素即之后的所有元素为未排序数列2:从头到尾依次扫描未排序序列,将扫描到的每个元素插入有序序列的适当位置(如果待插入的元素与有序序列中的某个元素相等,则将待插入元素插入到相等元素的后面。)举个栗子原数组:3 38 5 44 15 36第一轮:3 38 5 44 15 36第二轮:3 5 38 44 15 36第三
2021-12-09 11:10:30
378
原创 排序算法专题-选择排序
选择排序是一种思想时分简单的算法,其原理是每次都在未排序数组中找到最小(最大)的元素,放到已排序序列的尾部。算法步骤是:1:首先在未排序序列中找到最小元素,存放到排序序列的起始位置2:从剩余为排序元素中继续寻找最小元素,存放到排序序列的末尾3:重复2,直至未排序序列为空举个栗子原数组:3 38 5 44 15 36,第一轮,找到最小元素未3,原数组不变,已排序序列3第二轮,找到最小元素5,将5与38交换位置,已排序序列3 5第三轮,找到最小元素15,将15与38交换位置,
2021-12-09 10:34:21
813
原创 排序算法专题-冒泡排序
顾名思义,冒泡排序的原理就是最小(最大)的元素会在一次次迭代中逐渐浮现到数组的顶端,每一次的迭代都是相邻两个元素之间的比较.具体的算法步骤是:1:比较相邻的元素。如果第一个比第二个大,就交换他们两个。2:对每一对相邻元素作同样的比较和操作,一直到数组最后一个元素。第一轮迭代完成后,最后的元素会是最大的数。3:针对所有的元素重复以上的步骤,每一轮迭代需要的比较次数为n-k,k为已经迭代的次数,因为每迭代以此,就有一个元素确定了位置。举个栗子:原数组:3 38 5 44 15 36
2021-12-09 09:54:12
1093
原创 排序算法专题-概览
排序算法是很多算法的基础,尤其是目前最为热门的搜索、推荐系统中,良好的排序可以极大的促进搜索效率,目前市场上各种各样的算法都是基于下述的十大经典排序算法。 总的来说,排序算法可以分为内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存。常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括:图片来源-菜鸟教程...
2021-12-09 09:26:10
936
原创 leetcode刷题日记-三个无重叠子数组的最大和
题目描述给你一个整数数组 nums 和一个整数 k ,找出三个长度为 k 、互不重叠、且 3 * k 项的和最大的子数组,并返回这三个子数组。以下标的数组形式返回结果,数组中的每一项分别指示每个子数组的起始位置(下标从 0 开始)。如果有多个结果,返回字典序最小的一个。示例:输入:nums = [1,2,1,2,6,7,5,1], k = 2输出:[0,3,5]解释:子数组 [1, 2], [2, 6], [7, 5] 对应的起始下标为 [0, 3, 5]。也可以取 [2, 1].
2021-12-08 10:55:03
467
原创 Go语言的线程模型-线程阻塞+线程调度
线程调度 上一个博客简单的讲了Goroutine的整体机制,本篇文章好好理一下Goroutine机制的线程堵塞处理和调度问题。 上一章将goroutine机制分为了4个部分,分别是用户线程(G),系统线程(M)、用户线程调度器(P)和内核调度器,具体见文章Go语言的线程模型-Goroutine机制,这一节重点讲一讲P在goroutine机制中的作用和原理。 P在goroutine中的主要作用是来调度G和M的对应关系,在实际运行中,用户同发起多个线程,这些线程进入内存之后一部分进入P中,当P满了之
2021-12-07 12:51:50
944
原创 leetcode刷题日记-边界着色
题目描述给你一个大小为 m x n 的整数矩阵 grid ,表示一个网格。另给你三个整数 row、col 和 color 。网格中的每个值表示该位置处的网格块的颜色。当两个网格块的颜色相同,而且在四个方向中任意一个方向上相邻时,它们属于同一 连通分量 。连通分量的边界 是指连通分量中的所有与不在分量中的网格块相邻(四个方向上)的所有网格块,或者在网格的边界上(第一行/列或最后一行/列)的所有网格块。请你使用指定颜色 color 为所有包含网格块 grid[row][col] 的 连通分量的边界.
2021-12-07 09:45:53
214
原创 Go语言的线程模型-Goroutine机制
大多数Go语言的使用者认为Go语言是互联网时代的C语言,为应用而生,当然我也这么觉得哈哈哈,听君一席话真是如听君一席话。Go语言最大的特点除了接口就是线程的处理模型了,本问就简单讲讲Go语言的线程模型吧。Go语言的线程用过的都知道是由go关键字来开启,由channel来完成线程之间的通信,那么再底层是由什么框架来实现的呢?Go语言的线程模型实际是协程的一种实现,叫goroutine机制。这个机制可以简单分为三个部分,用户线程,系统线程、内核调度器。其中用户线程由goroutine来维护,简称为G,包.
2021-12-06 11:36:23
679
原创 leetcode刷题日记- 超级次方
题目描述:你的任务是计算 ab 对 1337 取模,a 是一个正整数,b 是一个非常大的正整数且会以数组形式给出示例输入:a = 2, b = [3]输出:8输入:a = 2147483647, b = [2,0,0]输出:1198解析:这是一个看起来很简单,实质上很复杂的题目,如果你知道余数定理的话,如果不知道这就是一个很难的题目了。再将余数定理之前,先说一下快速幂,这题就是快速幂+余数定理的结合。先说说快速幂的问题,讲快速幂之前先说一说分治的思想。比如我们要算5234的.
2021-12-06 10:43:15
730
原创 leetcode刷题日记-两数之和系列
两数之和leetcode关于两数之和的题目有一个系列,两数之和–>两数之和(有序数列)–>三数之和–>四数之和,这些系列题目看着一个比一个复杂,但是都是基于一个结题思路-双指针。两数之和-无序题目描述:给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例:
2021-12-06 09:42:13
419
原创 基于阿里云服务器+wordpress构建自己的网站(全过程系列,无需任何编程知识)
1:阿里云服务器配置既然是基于阿里云服务器,那么当然是先得申请一个阿里云服务器。本博客使用的服务器是云服务器ECS-共享计算型 n4系列,阿里云对新用户有很多优惠活动,这个是我当时花了69块钱买了一年,又通过某个渠道,返了60块钱,相当于白嫖了一手。怎么配置和部署服务器,这里就不讲了,有很多博客已经讲得很详细了,本博客的操作系统是Ubuntu 20.04 64位,只要是linux就行。阿里云服务器部署和配置这里提一下安全组的配置,要搭建网站,有几个安全组一点要添加。1:进入阿里
2021-11-30 09:12:00
1632
原创 基于百度地图开放平台Web服务api爬取经纬度并转换为WGS84坐标
前言本博客总的来说原创的东西不多,主要的内容是集成了多个博主和参考网站的代码,实现了基于百度地图开放平台Web服务api爬取经纬度并转换为WGS84坐标一整套体系流程,文章后面会附上相应作者文章的链接,若有侵权,请联系我修改。百度地图开放平台创建web服务应用百度开放平台的网站`百度地图开放平台创建新的应用之前你需要申请一个账号,并且通过认证。点击控制台–>应用管理–>我的应用–>创建应用,其中应用类型选择服务端,启用的服务默认全部选中即可,请求
2021-04-28 13:24:41
3495
AE+C#实现删除指定图层的操作
2018-06-11
基于C#的文件流构建学籍管理系统
2018-06-09
基于AE+C#的系统开发案例
2018-06-08
基于C#和Oracle实现数据库的可视化管理
2018-06-08
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人