算法
文章平均质量分 73
gerrylon007
这个作者很懒,什么都没留下…
展开
-
BloomFilter原理学习
BloomFilter我们可能经常听到也在使用, 它的特点是如果判断结果为"不存在", 则一定不存在;如果判断为存在, 则可能存在. 如下图未说明当我们判断z元素存在时, 其实是不存在的, 即存在有概率性.原创 2023-03-05 18:28:30 · 1598 阅读 · 1 评论 -
算法题目:两个链表生成相加链表
题目题目来自于:https://www.nowcoder.com/practice/c56f6c70fb3f4849bc56e33ff2a50b6b?tpId=190&tags=&title=&diffculty=0&judgeStatus=0&rp=1假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。例如:链表 1 为 9->3->7,链表 2 为 6-&g原创 2020-08-29 14:49:07 · 512 阅读 · 0 评论 -
用有向无环图解决casbin循环继承的问题
用有向无环图解决casbin循环继承的问题原创 2020-03-31 17:50:42 · 1221 阅读 · 2 评论 -
最大连续子序列和
问题描述给定一个整数序列,a0,a1,a2,...,ana_0, a_1, a_2, ... , a_na0,a1,a2,...,an(可正可负),求其中最大的子序列和。如果所有整数都是负数,那么最大子序列和为0;用数学语言描述, 就是:求 max(0,∑ijai), 0≤i≤j≤nmax(0, \sum\limits_{i}^{j}a_i), \space 0 \le i...原创 2019-01-28 20:29:35 · 265 阅读 · 0 评论 -
stl之stack,卡特兰数
概述stack, 即栈是一种操作受限制的线性表, 特点为: “后进先出”, 即LIFO(Last In First Out);常用方法对stack常用的操作记下笔记:#include <iostream>#include <stack&原创 2019-01-29 19:38:21 · 278 阅读 · 0 评论 -
golang之list与LRU
测试环境:go version go1.11.2 windows/amd64list是go语言自带的双循环链表实现.源码位置: $GOPATH/src/container/list/list.go其中两个核心数据结构:一个是节点的定义:// 节点的定义type Element struct { next, prev *Element // 后继, 前驱指针 list *Lis...原创 2019-02-11 21:08:41 · 530 阅读 · 0 评论 -
golang之heap学习
测试环境go version go1.11.2 windows/amd64概述heap, 即堆, 是一种用数组实现的完全二叉树.堆有大根堆和小根堆, 分别是说: 对应的二叉树的树根结点的键值是所有堆节点键值中最大/小者。为了方便叙述, 以小根堆为例说下概念.堆常见的实现方法: 在数组(arr)中存储若干个元素, 如果数组第一个元素为哨兵(如果是小根堆, 则arr[0]为可以放...原创 2019-02-11 23:46:01 · 4252 阅读 · 0 评论 -
桶排序
桶排序是针对类似这样的情况:有N个整数, 它们的范围是[0,M][0, M][0,M], 那么我们可以做(伪码描述):初始化一个count数组(也就是所谓的桶), 长度为M+1, 每个元素为一个空链表这里用链表, 主要是当有重复元素时保持插入操作的快速;依次读入N个整数, 将arr[i]插入到count[arr[i]]这个链表中;从0到M, 如果桶count[i]不为空(链表size(...原创 2019-02-12 12:45:35 · 175 阅读 · 0 评论 -
并查集
概述并查集, 书面叫不相交集. 由于关于这个数据结构(集合)主要操作是Union(集合求并)和Find(查找一个元素属于哪个集合), 所以经常见到叫并查集.问题引入为了对这种数据结构有个感性的认识, 先给一个实际的问题:有10台电脑, 任意两台电脑可能有网线连接, 此时说这两个电脑连通. 我们认为A和B连通, B和C连通时, 那么A和C也连通.问题是: 现在给定一些电脑的连通情况, 求...原创 2019-02-13 13:41:59 · 262 阅读 · 0 评论 -
秦九韶算法
秦九韶算法是啥呢?简单来说,就是用来计算多项式值的一种方法。一般而言, 对于多项式:f(x)=anxn+an−1xn−1+...+a1x+a0f(x) = a_{n}x^{n} + a_{n-1}x^{n-1} + ... + a_{1}x + a_{0}f(x)=anxn+an−1xn−1+...+a1x+a0求f(k)f(k)f(k) (k为某一常量)的值, 最直接的办法就是按...原创 2019-01-28 10:37:34 · 7473 阅读 · 1 评论 -
洗牌算法
洗牌在英文中叫shuffle,实际应用中就是给定一个数组, 将其中的元素打乱。这个问题最开始学习js时遇到, 也有一个很好玩的办法:function shuffle(arr) { if (!Array.isArray(arr)) { return arr; } return arr.sort((a, b) => { return M...原创 2019-01-27 12:51:15 · 188 阅读 · 0 评论 -
斐波那契数列
问题起源兔子生长的数目问题:第一个月初有一对刚诞生的兔子第二个月之后(第三个月初)它们可以生育每月每对可生育的兔子会诞生下一对新兔子兔子永不死去如果笔算, 前几项可以很快得出:nnn0123456789FnF_nFn0112358132134数学描述递推公式F0=0F1=1Fn=Fn−1+Fn−2\beg...原创 2019-01-10 11:20:08 · 280 阅读 · 0 评论 -
判断一个数是否为2的N次方
在阅读goim源代码的时候, 在ring.go中看到这句代码:// 2^Nif num&(num-1) != 0 { // ...}原来这是判断2的N次方。然后总结了下, 判断一个数n是否为2的N次方的办法(要求n>0):第一种:笨办法, 2^i,递增ifunc judge(n int) bool { if n <= 0 { return false...原创 2018-10-22 11:21:24 · 4685 阅读 · 0 评论 -
topK问题
topK问题:给定一批数,如n个, 然后从中找出k个最大(小)的数。具体一个场景,比如给出1000w个数,找出最大的100个。思路有以下几个:先排序,取出最大的几个,伪代码如下:sort(arr, 1, n)return arr[1, k]时间复杂度可以达到O(n*logn)上述思路有个问题,就是只是需要最大的k个,但是全体排序,在点浪费,可以考虑局部排序,找到最大的k个...原创 2018-10-24 17:47:54 · 2411 阅读 · 0 评论 -
golang之排序使用
golang标准库实现了许多常用的排序方法,比如对整数序列排序:sort.Ints(),那么如果对自定义的数据结构排序怎么做呢?比如对一个用户列表,按他们的积分排序:首先定义数据结构,为了能清楚说明问题,只给两个字段。type User struct { Name string Score int}type Users []Usergolang中想要自定义排序,自己的结构要...原创 2018-10-31 20:30:01 · 2283 阅读 · 2 评论 -
区间合并问题(merge-intervals)
这是leetcode上的一道题目,原题目表述如下:给定一组区间,合并所有有重叠的区间.例子1:Input: [[1,3],[2,6],[8,10],[15,18]]Output: [[1,6],[8,10],[15,18]]解释: 由于[1,3] 和 [2,6] 有重叠区域, 合并为 [1,6].例子2:Input: [[1,4],[4,5]]Output: [[1,5]]解释...原创 2018-10-31 22:41:19 · 8566 阅读 · 1 评论 -
魔术师发牌问题
问题描述:魔术师手中有A、2、3……J、Q、K十三张黑桃扑克牌。在表演魔术前,魔术师已经将他们按照一定的顺序叠放好(有花色的一面朝下)。魔术表演过程为:一开始,魔术师数1,然后把最上面的那张牌翻过来,是黑桃A;然后将其放到桌面上;第二次,魔术师数1、2;将第一张牌放到这些牌的最下面,将第二张牌翻转过来,正好是黑桃2;第三次,魔术师数1、2、3;将第1、2张牌依次放到这些牌的最下面,将第...原创 2018-12-28 19:37:56 · 502 阅读 · 0 评论 -
拉丁方阵问题
问题描述(引自拉丁方阵_百度百科):拉丁方阵(英语:Latin square)是一种 n × n 的方阵,在这种 n x n 的方阵里,恰有 n 种不同的元素,每一种不同的元素在同一行或同一列里只出现一次。给个形象的例子, 当n=4时:(1)1234234134124123\begin{matrix} 1 &amp;amp;amp;amp; 2 &amp;amp;amp;amp; 3 &amp;amp;amp;amp; 4\...原创 2018-12-28 22:01:09 · 3455 阅读 · 0 评论 -
约瑟夫环
问题描述(引自约瑟夫环_百度百科):约瑟夫环(约瑟夫问题)是一个数学的应用问题:已知n个人(以编号1,2,3…n分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。通常解决这类问题时我们把编号从0~n-1,最后结果+1即为原问题的解问题结论:递推公式: f(n,k)=(f(...原创 2018-12-29 10:18:51 · 303 阅读 · 0 评论 -
快速幂
问题求aba^bab, 为了简单起见, 假定b≥0且b为整数b\ge0 且b为整数b≥0且b为整数.朴素求解方法这个问题很简单, 最简单的想法, a自乘b次即可, 也就是所谓的朴素求解方法:int pow_naive(int a, int b) { int ret = 1; while (b--) { ret *= a; } ret...原创 2019-01-11 17:52:09 · 142 阅读 · 0 评论 -
leetcode 4的幂
原题链接;https://leetcode-cn.com/problems/power-of-four/题目描述:给定一个整数 (32 位有符号整数),请编写一个函数来判断它是否是 4 的幂次方。题意很明确, 就是给一个32 位有符号整数, 判断它是不是4的整数次方(n=4kn=4^{k}n=4k).为了避免歧义, 这里认为k≥0k\ge0k≥0总结了下, 大致有如下几种思路:思...原创 2019-01-08 23:01:43 · 403 阅读 · 0 评论 -
猴子偷桃问题
“猴子偷桃问题”问题描述:有一群猴子,去偷了一堆桃子,商量之后决定每天吃剩余桃子的一半,当每天大家吃完桃子之后,有个贪心的小猴都会偷偷再吃一个桃子,按照这样的方式猴子们每天都快乐的吃着桃子直到第十天,当大家再想吃桃子时,发现只剩下一个桃子了问: 最开始有多少个桃子?简单分析下就是,假设前一天桃子数为aaa, 当天数目为bbb, 那么有a=2×(b+1)a = 2\times(b ...原创 2019-01-24 19:28:24 · 6994 阅读 · 0 评论 -
汉诺塔问题
概述汉诺塔问题应该是初学C语言时都会遇到的一个问题.当时没有仔细想过, 只是大概就那么回事.现在来仔细分析下.问题描述以下引自维基百科1有三根杆子A,B,C。A杆上有 N 个 (N&amp;amp;gt;1) 穿孔圆盘,盘的尺寸由下到上依次变小。要求按下列规则将所有圆盘移至 C 杆:每次只能移动一个圆盘;大盘不能叠在小盘上面。提示:可将圆盘临时置于 B 杆,也可将从 A 杆移出的圆盘重新移回...原创 2019-01-25 16:38:09 · 294 阅读 · 0 评论 -
牛顿迭代法求平方根
package mainimport ( &quot;fmt&quot;)func abs(f float64) float64 { var a float64 if f &amp;gt;= 0 { a = f } else { a = -f } return a}func Sqrt(x float64) float64 {...原创 2018-05-08 23:40:51 · 296 阅读 · 0 评论