![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构算法
文章平均质量分 83
数据结构的算法
凉月啊八
真没想到,我高中就注册CSDN了,当时是为啥注册的呢???
展开
-
[蓝桥杯][历届试题 PREV-49]发现环(Java)(并查集+DFS)
历届试题 发现环 时间限制:1.0s 内存限制:256.0MB问题描述 小明的实验室有N台电脑,编号1~N。原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。 不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径,...原创 2019-02-09 18:50:18 · 1593 阅读 · 2 评论 -
KMP算法
感觉网上讲解的 KMP算法 看的我云里雾里的,而且还有很多公式,看着头大。于是想着把自己理解的 KMP算法 写出来,以便之后忘记后能快速拾起。我没有写数学理论,详解可以看LeetCode 28.实现 strStr() 官方解析例题LeetCode 28.实现 strStr()简单来说,就是给两个 String 参数,主串 haystack, 模式串 needle。现在,需要返回,如果在主串中存在子串,子串与模式串相等,那么返回子串首个字母在主串的位置。如果没有这个子串,那么返回 -1.全是小原创 2022-03-04 17:29:11 · 289 阅读 · 0 评论 -
[LeetCode][H0629]K个逆序对数组(Java)(动态规划)
题目描述给出两个整数 n 和 k,找出所有包含从 1 到 n 的数字,且恰好拥有 k 个逆序对的不同的数组的个数。逆序对的定义如下:对于数组的第i个和第 j个元素,如果满i < j且 a[i] > a[j],则其为一个逆序对;否则不是。由于答案可能很大,只需要返回 答案 mod 109 + 7 的值。示例 1:输入: n = 3, k = 0输出: 1解释: 只有数组 [1,2,3] 包含了从1到3的整数并且正好拥有 0 个逆序对。示例 2:输入: n = 3, k = 1原创 2022-02-08 11:35:39 · 447 阅读 · 0 评论 -
[LeetCode][M0319]灯泡开关(Java)(数学)
题目描述初始时有 n 个灯泡处于关闭状态。第一轮,你将会打开所有灯泡。接下来的第二轮,你将会每两个灯泡关闭一个。第三轮,你每三个灯泡就切换一个灯泡的开关(即,打开变关闭,关闭变打开)。第 i 轮,你每 i个灯泡就切换一个灯泡的开关。直到第 n 轮,你只需要切换最后一个灯泡的开关。找出并返回 n 轮后有多少个亮着的灯泡。示例 1:输入:n = 3输出:1 解释:初始时, 灯泡状态 [关闭, 关闭, 关闭].第一轮后, 灯泡状态 [开启, 开启, 开启].第二轮后, 灯泡状态 [开启, 关原创 2021-11-19 11:07:07 · 737 阅读 · 2 评论 -
[LeetCode][M0199]二叉树的右视图(Java)(BFS)
题目描述给定一个二叉树的 根节点 root,想象自己站在它的右侧,按照从顶部到底部的顺序,返回从右侧所能看到的节点值。示例 1:输入: [1,2,3,null,5,null,4]输出: [1,3,4]示例 2:输入: [1,null,3]输出: [1,3]示例 3:输入: []输出: []提示:二叉树的节点个数的范围是 [0,100]-100 <= Node.val <= 100来源:力扣(LeetCode)链接:https://leetcode-cn.com/p原创 2021-09-04 20:32:51 · 206 阅读 · 0 评论 -
[LeetCode][M0621]任务调度器(Java)(贪心)
题目描述给你一个用字符数组 tasks 表示的 CPU 需要执行的任务列表。其中每个字母表示一种不同种类的任务。任务可以以任意顺序执行,并且每个任务都可以在 1 个单位时间内执行完。在任何一个单位时间,CPU 可以完成一个任务,或者处于待命状态。然而,两个 相同种类 的任务之间必须有长度为整数 n 的冷却时间,因此至少有连续 n 个单位时间内 CPU 在执行不同的任务,或者在待命状态。你需要计算完成所有任务所需要的 最短时间 。示例 1:输入:tasks = [“A”,“A”,“A”,“B”,“B原创 2021-09-01 22:49:44 · 257 阅读 · 0 评论 -
[LeetCode][面试题 08.01]三步问题(Java)(动态规划)
题目描述三步问题。有个小孩正在上楼梯,楼梯有n阶台阶,小孩一次可以上1阶、2阶或3阶。实现一种方法,计算小孩有多少种上楼梯的方式。结果可能很大,你需要对结果模1000000007。示例1:输入:n = 3输出:4说明: 有四种走法示例2:输入:n = 5输出:13提示:n范围在[1, 1000000]之间来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/three-steps-problem-lcci著作权归领扣网络所有。商业转载原创 2021-08-11 14:20:31 · 272 阅读 · 0 评论 -
[LeetCode][E0762]二进制表示中质数个计算置位(Java)(位运算)
题目描述给定两个整数 L 和 R ,找到闭区间 [L, R] 范围内,计算置位位数为质数的整数个数。(注意,计算置位代表二进制表示中1的个数。例如 21 的二进制表示 10101 有 3 个计算置位。还有,1 不是质数。)示例 1:输入: L = 6, R = 10输出: 4解释:6 -> 110 (2 个计算置位,2 是质数)7 -> 111 (3 个计算置位,3 是质数)9 -> 1001 (2 个计算置位,2 是质数)10-> 1010 (2 个计算置位,2原创 2021-08-10 13:49:49 · 90 阅读 · 0 评论 -
[LeetCode][M0950]按递增顺序显示卡牌(Java)(规律、模拟)
题目描述:牌组中的每张卡牌都对应有一个唯一的整数。你可以按你想要的顺序对这套卡片进行排序。最初,这些卡牌在牌组里是正面朝下的(即,未显示状态)。现在,重复执行以下步骤,直到显示所有卡牌为止:从牌组顶部抽一张牌,显示它,然后将其从牌组中移出。如果牌组中仍有牌,则将下一张处于牌组顶部的牌放在牌组的底部。如果仍有未显示的牌,那么返回步骤 1。否则,停止行动。返回能以递增顺序显示卡牌的牌组顺序。答案中的第一张牌被认为处于牌堆顶部。示例:输入:[17,13,11,2,3,5,7]输出:[2,13原创 2021-03-23 18:07:45 · 136 阅读 · 0 评论 -
[蓝桥杯][历届试题 PREV-53]分考场(Java)(DFS)
历届试题 分考场 时间限制:1.0s 内存限制:256.0MB问题描述 n个人参加某项特殊考试。 为了公平,要求任何两个认识的人不能分在同一个考场。 求是少需要分几个考场才能满足条件。输入格式 第一行,一个整数n(1<n<100),表示参加考试的人数。 第二行,一个整数m,表示接下来有m行数据 以下m行每行的格式为:两个整数a...原创 2019-01-29 22:37:05 · 1229 阅读 · 0 评论 -
[牛客]乔乔的包(Java)(动态规划)
链接:https://www.nowcoder.com/questionTerminal/a16b6679cc1841c3a20324279116d040?orderByHotValue=0&page=1&onlyReference=false来源:牛客网[编程题]乔乔的包时间限制:1秒 空间限制:32768K【问题描述】玥玥带乔乔一起逃亡,现在有许多的东西要放到乔...原创 2019-01-23 20:05:05 · 373 阅读 · 0 评论 -
[蓝桥杯][历届试题 PREV-54]合根植物 (Java)(并查集)
问题描述 w星球的一个种植园,被分成 m * n 个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。 这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成为一体。 如果我们告诉你哪些小格子间出现了连根现象,你能说出这个园中一共有多少株合根植物吗?输入格式 第一行,两个整数m,n,用空格分开,表示格子的行数、列数(1<m,n...原创 2019-01-22 19:26:37 · 658 阅读 · 0 评论 -
[蓝桥杯][2017年第八届真题]小计算器 (java),官网测试只有三十分,待修改
看了好多关于这个题的答案,java版本的一个都不对,都是零分,,C++版的倒是满分,可是我看着想法与我写的java基本一样,不清楚我错在了哪里。不多说看代码吧import java.util.Scanner;import java.util.List;import java.util.ArrayList;public class Main { static List<St...原创 2019-01-21 19:38:02 · 565 阅读 · 0 评论 -
[LeetCode][M0002]两数相加(java)(链表)
题目描述:给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。示例:输入:(2 -&amp;amp;gt; 4 -&amp;amp;gt; 3) + (5 -&amp;amp;gt; 6 -&amp;amp;gt; 4)原创 2018-12-15 15:34:35 · 137 阅读 · 0 评论 -
[LeetCode][H0920]播放列表的数量(Java)(动态规划)
题目描述:你的音乐播放器里有N首不同的歌,在旅途中,你的旅伴想要听L首歌(不一定不同,即,允许歌曲重复)。请你为她按如下规则创建一个播放列表:每首歌至少播放一次。 一首歌只有在其他K首歌播放完之后才能再次播放。返回可以满足要求的播放列表的数量。由于答案可能非常大,请返回它模10^9 + 7的结果。示例 1:输入:N = 3, L = 3, K = 1输...原创 2019-04-15 15:50:21 · 452 阅读 · 0 评论 -
[LeetCode][M0969]煎饼排序(Java)(暴力)
给定数组A,我们可以对其进行煎饼翻转:我们选择一些正整数k<= A.length,然后反转A的前k个元素的顺序。我们要执行零次或多次煎饼翻转(按顺序一次接一次地进行)以完成对数组A的排序。返回能使A排序的煎饼翻转操作所对应的 k 值序列。任何将数组排序且翻转次数在10 * A.length范围内的有效答案都将被判断为正确。示例 1:输入:[3,2...原创 2019-03-18 20:47:58 · 416 阅读 · 0 评论 -
[LeetCode][H0164]最大间距(Java)(桶排序)
给定一个无序的数组,找出数组在排序之后,相邻元素之间最大的差值。如果数组元素个数小于 2,则返回 0。示例1:输入: [3,6,9,1]输出: 3解释: 排序后的数组是 [1,3,6,9], 其中相邻元素 (3,6) 和 (6,9) 之间都存在最大差值 3。示例2:输入: [10]输出: 0解释: 数组元素个数小于 2,因此返回 0。说明:你可以假设数组...原创 2019-03-16 16:41:35 · 238 阅读 · 0 评论 -
[LeetCode][H0329]矩阵中最长递增路径(Java)(记忆化搜索)
题目描述:给定一个整数矩阵,找出最长递增路径的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你不能在对角线方向上移动或移动到边界外(即不允许环绕)。示例 1:输入: nums = [ [9,9,4], [6,6,8], [2,1,1]] 输出: 4 解释: 最长递增路径为[1, 2, 6, 9]。示例 2:输入: nums = [...原创 2019-03-13 21:28:30 · 803 阅读 · 0 评论 -
[LeetCode][H0847]访问所有节点的最短路径(java)(BFS+位运算)(状压DP)
847. 访问所有节点的最短路径题目描述给出graph为有 N 个节点(编号为0, 1, 2, ..., N-1)的无向连通图。graph.length = N,且只有节点i和j连通时,j != i在列表graph[i]中恰好出现一次。返回能够访问所有节点的最短路径的长度。你可以在任一节点开始和停止,也可以多次重访节点,并且可以重用边。示例 1:...原创 2019-03-13 20:29:54 · 507 阅读 · 0 评论 -
[LeetCode][H0032]最长有效括号(java)(动态规划)
题目描述:给定一个只包含'('和')'的字符串,找出最长的包含有效括号的子串的长度。示例1:输入: "(()"输出: 2解释: 最长有效括号子串为 "()"示例 2:输入: ")()())"输出: 4解释: 最长有效括号子串为 "()()"反思错误:这道题还真没遇到错误,思路还是没问题的。解题思路:1、我的思路:24ms从头开始遍历,...原创 2019-03-04 19:06:10 · 729 阅读 · 0 评论 -
[蓝桥杯][历届试题 PREV-50]对局匹配(Java)(动态规划)
历届试题 对局匹配 时间限制:1.0s 内存限制:256.0MB问题描述 小明喜欢在一个围棋网站上找别人在线对弈。这个网站上所有注册用户都有一个积分,代表他的围棋水平。 小明发现网站的自动对局系统在匹配对手时,只会将积分差恰好是K的两名用户匹配在一起。如果两人分差小于或大于K,系统都不会将他们匹配。 现在小明知道这个网站总共有N名用户,以及他们的积分...原创 2019-02-09 14:02:32 · 979 阅读 · 0 评论 -
[蓝桥杯][历届试题 PREV-52]小数第n位(Java)(循环节)
历届试题 小数第n位 时间限制:1.0s 内存限制:256.0MB问题描述 我们知道,整数做除法时,有时得到有限小数,有时得到无限循环小数。 如果我们把有限小数的末尾加上无限多个0,它们就有了统一的形式。 本题的任务是:在上面的约定下,求整数除法小数点后的第n位开始的3位数。输入格式 一行三个整数:a b n,用空格分开。a是被除数,b是除数,n是...原创 2019-01-30 23:02:09 · 725 阅读 · 0 评论 -
[LeetCode][E0007]整数反转(Java)(数学)
题目描述:给出一个 32 位的有符号整数,你需要将这个整数中每位上的数字进行反转。示例 1:输入: 123输出: 321示例 2:输入: -123输出: -321示例 3:输入: 120输出: 21注意:假设我们的环境只能存储得下 32 位的有符号整数,则其数值范围为 [−231, 231 − 1]。请根据这个假设,如果反转后整数溢出那么就返回 0。来源:力扣(Leet...原创 2019-11-10 19:24:37 · 132 阅读 · 0 评论 -
[LeetCode][M0337]打家劫舍 III(Java)(DFS)
题目描述:在上次打劫完一条街道之后和一圈房屋后,小偷又发现了一个新的可行窃的地区。这个地区只有一个入口,我们称之为“根”。 除了“根”之外,每栋房子有且只有一个“父“房子与之相连。一番侦察之后,聪明的小偷意识到“这个地方的所有房屋的排列类似于一棵二叉树”。 如果两个直接相连的房子在同一天晚上被打劫,房屋将自动报警。计算在不触动警报的情况下,小偷一晚能够盗取的最高金额。示例 1:输入: [3...原创 2019-11-09 11:50:25 · 176 阅读 · 0 评论 -
[LeetCode][M0003]无重复字符的最长子串(Java)(滑动窗口)
题目描述:给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。示例 1:输入: “abcabcbb”输出: 3解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。示例 2:输入: “bbbbb”输出: 1解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。示例 3:输入: “pwwkew”输出: 3解释: 因为无重复字符的最长子串是 “...原创 2019-09-06 20:02:23 · 261 阅读 · 0 评论 -
[蓝桥杯][历届试题 PREV-26]最大子阵(Java)(动态规划-最大子矩阵)
历届试题 最大子阵 时间限制:1.0s 内存限制:256.0MB问题描述 给定一个n*m的矩阵A,求A中的一个非空子矩阵,使这个子矩阵中的元素和最大。 其中,A的子矩阵指在A中行和列均连续的一块。输入格式 输入的第一行包含两个整数n, m,分别表示矩阵A的行数和列数。 接下来n行,每行m个整数,表示矩阵A。输出格式 输出一行,包含一个整数...原创 2019-06-07 19:19:17 · 916 阅读 · 0 评论 -
[洛谷][P2094]运输(Java)(贪心)
原题链接题目描述现在已知N件商品,和搬运它们其中每一件的费用。现在搬家公司老板Mr.sb决定让我们每次任意选取2件商品。然后这2件商品只算一件商品的费用。但是这个商品的搬运费用是将选出的2个商品的费用之和除以k的运算结果。如此反复。直到只收一件商品的钱。这个就是商店要付的费用。掌柜的想尽可能的少付钱,以便将更多的钱捐给希望工程。所以请你帮他计算一下最少只用付多少钱。【输入格式】tran...原创 2019-05-30 00:05:55 · 625 阅读 · 0 评论 -
[牛客][NOIP2000提高组]乘积最大(Java)(动态规划+高精度)
原题链接:乘积最大链接:https://ac.nowcoder.com/acm/problem/16757来源:牛客网时间限制:C/C++ 1秒,其他语言2秒空间限制:C/C++ 262144K,其他语言524288K64bit IO Format: %lld题目描述今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年。在华罗庚先...原创 2019-05-27 23:29:10 · 548 阅读 · 0 评论 -
[河北师范大学“云淮杯”][D]MJJ玩磁铁(Java)(贪心)
Time Limit:1 SecMemory Limit:128 MBSubmit:137Solved:8[Submit][Status][Web Board][Creator:eetze]原题链接::Problem D: MJJ玩磁铁Description MJJ在河北的ACM圈子中可谓是小有名气,毕竟当初一个人挑起队秒天秒地秒一切。在训练赛上多次A...原创 2019-04-22 19:27:32 · 521 阅读 · 0 评论 -
[LeetCode][M0609]在系统中查找重复文件(Java)(Map)
题目描述:给定一个目录信息列表,包括目录路径,以及该目录中的所有包含内容的文件,您需要找到文件系统中的所有重复文件组的路径。一组重复的文件至少包括二个具有完全相同内容的文件。输入列表中的单个目录信息字符串的格式如下:“root/d1/d2/…/dm f1.txt(f1_content) f2.txt(f2_content) … fn.txt(fn_content)”这意味着有 n 个文件(f1.txt, f2.txt … fn.txt 的内容分别是 f1_content, f2_content …原创 2020-07-27 12:09:16 · 140 阅读 · 0 评论 -
[LeetCode][E0101]对称二叉树(Java)(DFS)
题目描述:给定一个二叉树,检查它是否是镜像对称的。示例:例如,二叉树 [1,2,2,3,4,4,3] 是对称的。 1 / \ 2 2 / \ / \3 4 4 3但是下面这个 [1,2,2,null,3,null,3] 则不是镜像对称的: 1 / \ 2 2 \ \ 3 3进阶:你可以运用递归和迭代两种方法解决这个问题吗?来源:力扣(LeetCode)链接:https://leetcode-cn.com/prob原创 2020-07-26 17:17:31 · 334 阅读 · 0 评论 -
[LeetCode][M0012]整数转罗马数字(Java)(字符串)
题目描述:罗马数字包含以下七种字符: I, V, X, L,C,D 和 M。字符 数值I 1V 5X 10L 50C 100D 500M 1000例如, 罗马数字 2 写做 II ,即为两个并列的 1。12 写做 XII ,即为 X + II 。 27 写做 XXVII, 即为 XX + V + II原创 2020-07-04 10:41:52 · 370 阅读 · 0 评论 -
[LeetCode][E0009]回文数(Java)(数学)
题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。示例 1:输入: 121输出: true示例 2:输入: -121输出: false解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。示例 3:输入: 10输出: false解释: 从右向左读, 为 01 。因此它不是一个回文数。进阶:你能不将整数转为字符串来解决这个问题吗?来源:力扣(LeetCode)链接:https://leetco原创 2020-06-27 19:54:47 · 262 阅读 · 0 评论 -
[LeetCode][M0008]字符串转换整数 (atoi)(Java)(数学)
题目描述:请你来实现一个 atoi 函数,使其能将字符串转换成整数。首先,该函数会根据需要丢弃无用的开头空格字符,直到寻找到第一个非空格的字符为止。当我们寻找到的第一个非空字符为正或者负号时,则将该符号与之后面尽可能多的连续数字组合起来,作为该整数的正负号;假如第一个非空字符是数字,则直接将其与之后连续的数字字符组合起来,形成整数。该字符串除了有效的整数部分之后也可能会存在多余的字符,这些...原创 2019-11-25 21:39:15 · 129 阅读 · 0 评论 -
[Java][算法]Java 埃氏筛法与欧拉筛法 素数筛
原文地址:https://blog.csdn.net/tinydolphin/article/details/75208771import java.util.Arrays;/** * 埃拉托斯特尼筛法 VS 欧拉筛法(更优化) * * @author TinyDolphin * */public class Main { private static final...转载 2018-12-25 22:31:43 · 2102 阅读 · 0 评论 -
[学习笔记][算法]算法小技巧(Java)(添加中...)
最大公约数-欧几里得算法(辗转相除法)就是辗转相除法的实现。//计算a、b的最大公约数int gcd(int a,int b){ return b==0?a:gcd(b,a%b);}最小公倍数int lcm(int a,int b){ return (a*b)/gcd(a,b);}int gcd(){...}//最大公约数 函数快速幂 O(logn)假设求 35(xy),把指数换成二进制,就成了 3101我们从后向前遍历指数,首先是 1 (二进制与运算 y&1 ,判原创 2020-09-16 20:19:48 · 196 阅读 · 1 评论 -
[LeetCode][H0878]第 N 个神奇数字(Java)(数学、二分)
题目描述:如果正整数可以被 A 或 B 整除,那么它是神奇的。返回第 N 个神奇数字。由于答案可能非常大,返回它模 10^9 + 7 的结果。示例 1:输入:N = 1, A = 2, B = 3输出:2示例 2:输入:N = 4, A = 2, B = 3输出:6示例 3:输入:N = 5, A = 2, B = 4输出:10示例 4:输入:N = 3, A = 6, B = 4输出:8提示:1 <= N <= 10^92 <= A <= 4000原创 2020-07-28 18:04:47 · 232 阅读 · 0 评论 -
[LeetCode][M0016]最接近的三数之和(Java)(双指针)
题目描述:给定一个包括 n 个整数的数组 nums 和 一个目标值 target。找出 nums 中的三个整数,使得它们的和与 target 最接近。返回这三个数的和。假定每组输入只存在唯一答案。示例:输入:nums = [-1,2,1,-4], target = 1输出:2解释:与 target 最接近的和是 2 (-1 + 2 + 1 = 2) 。提示:3 <= nums.length <= 10^3-10^3 <= nums[i] <= 10^3-10^4 &原创 2020-07-24 10:39:23 · 134 阅读 · 0 评论 -
[LeetCode][H0010]正则表达式匹配(Java)(动态规划)
题目描述:给你一个字符串 s 和一个字符规律 p,请你来实现一个支持 ‘.’ 和 ‘*’ 的正则表达式匹配。‘.’ 匹配任意单个字符‘*’ 匹配零个或多个前面的那一个元素所谓匹配,是要涵盖 整个 字符串 s的,而不是部分字符串。说明:s 可能为空,且只包含从 a-z 的小写字母。p 可能为空,且只包含从 a-z 的小写字母,以及字符 . 和 *。示例 1:输入:s = “aa”...原创 2019-11-13 19:20:34 · 229 阅读 · 0 评论 -
[LeetCode][M0006]Z 字形变换(Java)(模拟)
题目描述:将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换...原创 2019-11-09 21:45:27 · 101 阅读 · 0 评论