算法
MonkeyKing.sun
未来已来,记录现在,验证未来
展开
-
高并发下的四种限流方法
高并发场景下,需要将用户的流量进行限流现在整理四种限流的方法:计数器算法是使用计数器在周期内累加访问次数,当达到设定的限流值时,触发限流策略。下一个周期开始时,进行清零,重新计数。缺点:当出现临界值的时候,会出现1秒钟超过上线的问题。滑动窗口算法是将时间周期分为N个小周期,分别记录每个小周期内访问次数,并且根据时间滑动删除过期的小周期。如下图,假设时间周期为1min,将1min再分为2个小周期,统计每个小周期的访问数量,则可以看到,第一个时间周期内,访问数量为75,第二个时间周期内,访问数量为100,超原创 2022-07-08 10:12:35 · 720 阅读 · 0 评论 -
常用的限流算法
常见的限流算法有两种:漏桶算法和令牌桶算法漏桶算法思路:水(请求)先进入到漏桶里,漏桶以一定的速度出水,当流入速度过大会直接溢出,漏桶算法能强行限制数据的传输速率。令牌桶算法思路:系统以恒定的速度往桶里放入令牌,而如果请求需要被处理,则从桶中获取一个令牌,当桶中没有令牌可取时,则拒绝服务。google开源工具包Guava提供了限流工具类RateLimiter,该类基于令牌桶算法的完成限流。...原创 2021-06-03 15:15:46 · 81 阅读 · 0 评论 -
leetcode刷题:数字的补数
给定一个正整数,输出它的补数。补数是对该数的二进制表示取反。注意:给定的整数保证在32位带符号整数的范围内。 你可以假定二进制数不包含前导零位。 示例 1:输入: 5输出: 2解释: 5的二进制表示为101(没有前导零位),其补数为010。所以你需要输出2。示例 2:输入: 1输出: 0解释: 1的二进制表示为1(没有前导零位),其补数为0。所以你需要输出0...原创 2018-07-04 09:37:51 · 806 阅读 · 0 评论 -
leetcode刷题:二叉树的最大深度
给定一个二叉树,找出其最大深度。二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。说明: 叶子节点是指没有子节点的节点。示例:给定二叉树 [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回它的最大深度 3 。java代码的实现,采用后续遍历/** * Definition ...原创 2018-07-04 10:06:06 · 256 阅读 · 0 评论 -
leetcode刷题:自除数
自除数 是指可以被它包含的每一位数除尽的数。例如,128 是一个自除数,因为 128 % 1 == 0,128 % 2 == 0,128 % 8 == 0。还有,自除数不允许包含 0 。给定上边界和下边界数字,输出一个列表,列表的元素是边界(含边界)内所有的自除数。示例 1:输入: 上边界left = 1, 下边界right = 22输出: [1, 2, 3, 4, 5...原创 2018-07-04 10:39:27 · 319 阅读 · 0 评论 -
leetcode刷题:翻转二叉树
翻转一棵二叉树。示例:输入: 4 / \ 2 7 / \ / \1 3 6 9输出: 4 / \ 7 2 / \ / \9 6 3 1java代码实现/** * Definition for a binary tree node. * public class TreeNo...原创 2018-07-04 11:27:04 · 884 阅读 · 0 评论 -
leetcode刷题:反转字符串
请编写一个函数,其功能是将输入的字符串反转过来。示例:输入:s = "hello"返回:"olleh"java的解法:class Solution { public String reverseString(String s) { char[] charArray = s.toCharArray(); for (int i = 0, ...原创 2018-07-04 11:50:19 · 306 阅读 · 0 评论 -
leetcode刷题:反转字符串中的单词 III
给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序。示例 1:输入: "Let's take LeetCode contest"输出: "s'teL ekat edoCteeL tsetnoc" 注意:在字符串中,每个单词由单个空格分隔,并且字符串中不会有任何额外的空格。java代码的实现class Solution { pub...原创 2018-07-04 12:57:02 · 500 阅读 · 0 评论 -
leetcode刷题:键盘行
给定一个单词列表,只返回可以使用在键盘同一行的字母打印出来的单词。键盘如下图所示。示例1:输入: ["Hello", "Alaska", "Dad", "Peace"]输出: ["Alaska", "Dad"]注意:你可以重复使用键盘上同一字符。 你可以假设输入的字符串将只包含字母。java 代码classclass SolutionSolution原创 2018-07-04 18:04:19 · 262 阅读 · 0 评论 -
leetcode刷题:唯一摩尔斯密码词
国际摩尔斯密码定义一种标准编码方式,将每个字母对应于一个由一系列点和短线组成的字符串, 比如: “a” 对应 “.-“, “b” 对应 “-…”, “c” 对应 “-.-.”, 等等。为了方便,所有26个英文字母对应摩尔斯密码表如下:[“.-“,”-…”,”-.-.”,”-..”,”.”,”..-.”,”–.”,”….”,”..”,”.—”,”-.-“,”.-..”,”–”,”-.”,”—...原创 2018-07-04 09:34:21 · 704 阅读 · 0 评论 -
leetcode刷题:合并二叉树
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠。你需要将他们合并为一个新的二叉树。合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 NULL 的节点将直接作为新二叉树的节点。解题的思路:合并两个二叉树当然就是同步遍历了,对于相同位置上的一对结点n1和n2,处理策略是:若n1和n2都存在,则只需要保留其中一个结点...原创 2018-07-03 17:44:28 · 1608 阅读 · 0 评论 -
leetCode刷题:从排序数组中删除重复项
从排序数组中删除重复项 给定一个排序数组,你需要在原地删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在原地修改输入数组并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2], 函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。 你不需要考虑数组中超出新长度后...原创 2018-07-03 11:30:32 · 215 阅读 · 0 评论 -
leetcode刷题:买卖股票的最佳时机 II
买卖股票的最佳时机 II 给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。设计一个算法来计算你所能获取的最大利润。你可以尽可能地完成更多的交易(多次买卖一支股票)。注意:你不能同时参与多笔交易(你必须在再次购买前出售掉之前的股票)。示例 1:输入: [7,1,5,3,6,4] 输出: 7 解释: 在第 2 天(股票价格 = 1)的时候买入,在第 3 天(股票价...原创 2018-07-03 13:15:25 · 252 阅读 · 0 评论 -
leetcode刷题:宝石与石头
给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此”a”和”A”是不同类型的石头。示例 1:输入: J = “aA”, S = “aAAbbbb” 输出: 3 示例 2:输入: J = “z”, S = “ZZ...原创 2018-07-03 14:13:52 · 2182 阅读 · 0 评论 -
leetcode刷题:翻转图像
给定一个二进制矩阵 A,我们想先水平翻转图像,然后反转图像并返回结果。水平翻转图片就是将图片的每一行都进行翻转,即逆序。例如,水平翻转 [1, 1, 0] 的结果是 [0, 1, 1]。反转图片的意思是图片中的 0 全部被 1 替换, 1 全部被 0 替换。例如,反转 [0, 1, 1] 的结果是 [1, 0, 0]。示例 1:输入: [[1,1,0],[1,0,1],[0,0...原创 2018-07-03 16:02:47 · 1000 阅读 · 0 评论 -
leetcode刷题:山脉数组的峰顶索引
我们把符合下列属性的数组 A 称作山脉:A.length >= 3存在 0 < i < A.length - 1 使得A[0] < A[1] < ... A[i-1] < A[i] > A[i+1] > ... > A[A.length - 1]给定一个确定为山脉的数组,返回任何满足 A[0] < A[1] < ... ...原创 2018-07-03 16:32:07 · 527 阅读 · 0 评论 -
leetcode刷题:判断路线成圈
初始位置 (0, 0) 处有一个机器人。给出它的一系列动作,判断这个机器人的移动路线是否形成一个圆圈,换言之就是判断它是否会移回到原来的位置。移动顺序由一个字符串表示。每一个动作都是由一个字符来表示的。机器人有效的动作有 R(右),L(左),U(上)和 D(下)。输出应为 true 或 false,表示机器人移动路线是否成圈。示例 1:输入: "UD"输出: true示例 2...原创 2018-07-03 16:54:07 · 250 阅读 · 0 评论 -
leetcode刷题:汉明距离
两个整数之间的汉明距离指的是这两个数字对应二进制位不同的位置的数目。给出两个整数 x 和 y,计算它们之间的汉明距离。注意:0 ≤ x, y < 231.示例:输入: x = 1, y = 4输出: 2解释: 1 (0 0 0 1) 4 (0 1 0 0)对应二进制位不同的位置。java的一种求解思路:class Solution {...原创 2018-07-03 17:23:50 · 736 阅读 · 0 评论 -
顺序查找的java、python、go语言的实现
顺序查找:从表中的第一个或者从表中的最后一个记录开始,逐个将表中记录的关键字和给定的值进行比较。若相同就返回,若不相同就继续查找java代码:public class OrderSearch { public static void main(String[] args){ int[] tables={1,2,8,4,5,234,344}; System.ou原创 2017-10-18 18:14:37 · 252 阅读 · 0 评论