![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
算法与数据结构
文章平均质量分 60
介绍算法与数据结构
yours_棒棒糖
间歇性踌躇满志,持续性混吃等死!!!难搞喔!!
生活不易,继续前行,为了成为最好的自己!
刷题记录,博客:https://github.com/can19960229/Candy_leetcode
展开
-
算法——十大排序算法(java版本实现)
十大排序算法冒泡排序传统的冒泡排序优化一:优化二:鸡尾酒排序选择排序插入排序希尔排序快速排序归并排序堆排序计数排序传统的计数排序计数排序优化桶排序基数排序冒泡排序传统的冒泡排序public static void sort(int array[]) { for (int i = 0; i < array.length - 1; i++) { for (int j = 0; j < array.length - i - 1; j++) { i原创 2020-07-13 19:42:46 · 200 阅读 · 0 评论 -
【算法与数据结构】判断IP地址是否合法,是IPV4,还是IPV6
java 判断IP地址是否合法,是IPV4,还是IPV6招银撕代码题:手撕代码,判断一个字符串是ipv6还是ipv4或者两者都不是。什么是IPV4 IPV6举个例子:IPv4:172.16.254.1——ipv41e1.4.5.6 ——no12…33.4——no1212.132123.33434.41221——noIPV62001:0db8:85a3:0:0:8A2E:0370:7334:——no2001:0db8:85a3:000:0:8A2E:0370:7334——ip原创 2021-05-27 20:44:32 · 976 阅读 · 0 评论 -
【数据结构与算法】——数组中的区间问题(重叠区间,合并区间,插入区间)
判断区间是否重叠力扣 252. 会议室给定一个会议时间安排的数组 intervals ,每个会议时间都会包括开始和结束的时间 intervals[i] = [starti, endi] ,请你判断一个人是否能够参加这里面的全部会议。示例 1::输入: intervals = [[0,30],[5,10],[15,20]]输出: false解释: 存在重叠区间,一个人在同一时刻只能参加一个会议。示例 2::输入: intervals = [[7,10],[2,4]]输出: true解释:原创 2021-05-11 20:26:29 · 1805 阅读 · 0 评论 -
【数据结构与算法系列】——前缀树(字典树)、后缀树,主要用于海量数据的查找和去重问题
前缀树LeetCode题目中有关前缀树的描述:Trie前缀树-字典树前缀树Trie树,即字典树,又称单词查找树或键树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:最大限度地减少无谓的字符串比较。Trie的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。Trie树也有它的缺点,Trie树的内存消耗非常大。性质:不同字符串的相同前缀只保存一份。操作:查找,插原创 2021-04-27 20:02:08 · 1729 阅读 · 0 评论 -
【LeetCode - 1】两数之和、三数之和、四数之和、N数之和
两数之和_返回两数的下标题目:给定一个整数数组和一个目标值,找出数组中和为目标值的两个数。你可以假设每个输入只对应一种答案,且同样的元素不能被重复利用。示例:给定 nums = [2, 7, 11, 15], target = 9因为 nums[0] + nums[1] = 2 + 7 = 9所以返回 [0, 1]思路:方法一:可以用暴力法进行破解,用双层循环遍历nums。一层遍历第一个加数代码int[] twoSum1(int[] nums,int target){原创 2021-04-26 20:27:25 · 233 阅读 · 0 评论 -
【一天搞懂一道排序算法系列】——快速排序
快速排序思想理解通过一趟排序,将要排序的数据分割成独立的两部分:分割点左边都是比它小的数,右边都是比它大的数例如:我们对“6 1 2 7 9 3 4 5 10 8”这个10个数进行排序。首先我们要在序列中找到一个数作为基准,我们找到最左边的6作为基准数。接下来,需要将这个序列中所有比基准数大的数放在6的右边,比基准数小的数放在6的左边,类似下面这种排列:3 1 2 5 4 6 9 7 10 8在初始状态下,数字6在序列的第1位。我们的目标是将6挪到序列中间的某个位置,假设这个位置是k。现在就需要寻找原创 2021-04-23 19:30:30 · 137 阅读 · 0 评论 -
【数据结构与算法】回溯算法
回溯法框架1、 路径: 也就是已经做出的选择。2、 选择列表: 也就是你当前可以做的选择。3、 结束条件: 也就是到达决策树底层, ⽆法再做选择的条件。回溯法框架:result = []def backtrack(路径, 选择列表): if 满⾜结束条件: result.add(路径) returnfor 选择 in 选择列表: 做选择 backtrack(路径, 选择列表) 撤销选择回溯法核心框架for 选择 in 选择列表: # 做选择 将该选择从选择列表移除原创 2021-04-23 19:18:13 · 103 阅读 · 0 评论 -
【数据结构系列】——单调队列
滑动窗口的最大值题目描述解题思路一个普通队列class Queue { void push(int n); // 或 enqueue, 在队尾加⼊元素 n void pop(); // 或 dequeue, 删除队头元素}一个单调队列class MonotonicQueue { // 在队尾添加元素 n void push(int n); // 返回当前队列中的最⼤值 int max(); // 队头元素如果是 n, 删除它 void pop(int n);}原创 2021-04-18 22:14:19 · 115 阅读 · 0 评论 -
【数据结构系列】单调栈
下一个更大元素I题目描述输入一个数组,返回一个等长的数组,对应索引存储着下一个更大的元素,如果没有更大的元素,就存-1;比如输入一个数组nums = [2,1,2,4,3],算法返回[4,2,4,-1,-1]解释:第一个2后面比2大的数是4;1后面比1大的数是2;第二个2后面比2大的数是4;4后面没有比4大的数,填-1;3后面没有比3大的数,填-1;解题思路单调栈,for循环从后往前扫描元素,借助栈的结构,倒着入栈,即正着出栈package labuladong_learn.Data_stru原创 2021-04-18 22:10:45 · 111 阅读 · 0 评论 -
【数据结构系列】——最近公共祖先问题
Git中关于最近公共祖先问题的应用:Git的rebase工作方式告诉我们一个经典算法问题:最近公共祖先(LCA)Lowest Common Ancestor比如:git pull命令,默认是使用merge方式将远端别人修改拉到本地,如果带上参数git pull -r,就会使用rebase的方式将远端修改拉到本地。两者直观的区别是:merge方式合并的分支会有很多“分支”、而rebase方法合并的分支就是一条直线对于多人协作,merge方式并不友好,处在dev分支,使用git rebas原创 2021-04-15 22:51:46 · 2066 阅读 · 0 评论 -
【数据结构系列】链表合并问题——重排链表
重排链表题目描述解题思路我们知道ArrayList的底层就是用数组实现的,所以我们将链表储存在一个ArrayList中,然后利用双指针,一个指向最前面,一个指向最后面,依次访问并向题目要求的链表形式进行转换!public void reorderList_1(ListNode head) { if (head == null){ return; } List<ListNode> list = new Array原创 2021-04-15 11:15:33 · 217 阅读 · 0 评论 -
【数据结构系列】链表合并问题——链表的奇偶重排
链表的奇偶重排题目描述给定一个单链表,请设定一个函数,将链表的奇数位节点和偶数位节点分别放在一起,重排后输出。注意是节点的编号而非节点的数值。示例1输入{1,2,3,4,5,6}返回值{1,3,5,2,4,6}说明1->2->3->4->5->6->NULL重排后为1->3->5->2->4->6->NULL示例2输入{1,4,6,3,7}返回值{1,6,7,4,3}说明1->4->6-原创 2021-04-15 11:13:46 · 692 阅读 · 0 评论 -
【数据结构系列】链表合并问题——两个链表生成相加链表
两个链表生成相加链表题目描述假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。示例1输入[9,3,7],[6,3]返回值{1,0,0,0}解题思路我的笨办法:利用三个栈模拟两个链表相加,第一个栈存第一个链表的头到尾节点,第二个链表存第二个链表的头到尾节点,由于原创 2021-04-15 11:12:30 · 234 阅读 · 0 评论 -
【数据结构系列】链表合并问题——合并k个已排序的链表
合并k个已排序的链表题目描述假设链表中每一个节点的值都在 0 - 9 之间,那么链表整体就可以代表一个整数。给定两个这种链表,请生成代表两个整数相加值的结果链表。例如:链表 1 为 9->3->7,链表 2 为 6->3,最后生成新的结果链表为 1->0->0->0。示例1输入[9,3,7],[6,3]返回值{1,0,0,0}分治法 public ListNode mergeKLists_1(ArrayList<ListNode> l原创 2021-04-15 11:07:07 · 196 阅读 · 0 评论 -
【数据结构系列】——二叉树的各个遍历及序列化与反序列化
二叉树的各种遍历,序列化与反序列化序列化与反序列化:将变成语言中的结构体序列化成JSON字符串,存入缓存或者通过网络发送给远程服务,消费者接受JSON字符串然后进行范徐丽恶化,就可以得到原始数据了。目的是,已某种固定格式组织字符串,使得数据可以独立于编程语言。序列化:吧结构化的数据“打平”,其实就是在考察二叉树的遍历方式反序列化,将字符串还原出二叉树前序遍历前序遍历框架:void traverse(TreeNode root){ if(root == null) return; //前序遍历原创 2021-04-13 21:02:51 · 227 阅读 · 0 评论 -
【数据结构系列】——完全二叉树(统计二叉树的节点总数)
完全二叉树1. 普通二叉树的遍历,统计节点个数public int countNodes(TreeNode root){ if (root == null) return 0; return 1 + countNodes(root.left) + countNodes(root.right);}2. 满二叉树的节点总数public int countNodes(TreeNode root){ int h = 0; while (root != nu原创 2021-04-12 22:58:49 · 1536 阅读 · 0 评论 -
【数据结构系列】——二叉树的操作集合
二叉树二叉树的遍历void traverse(TreeNode root) { // root 需要做什么? 在这做。 // 其他的不⽤ root 操⼼, 抛给框架 traverse(root.left); traverse(root.right);}二叉树A中是否包含子树B可以用递归的思想,先判断树的根节点是是否相等,若相等,则递归判断他们的子树是否相等;如果根节点不相等,则判断B树是存在在A树的左子树还是右子树//递归public static class原创 2021-04-12 22:57:49 · 153 阅读 · 0 评论 -
【数据结构系列】——二叉搜索树的操作集合
二叉树二叉树的遍历void traverse(TreeNode root) { // root 需要做什么? 在这做。 // 其他的不⽤ root 操⼼, 抛给框架 traverse(root.left); traverse(root.right);}二叉搜索树热个身1. 如何把二叉树所有节点中的值加一void plusOne(TreeNode root){ if(root == null) return; root.val +原创 2021-04-11 15:44:35 · 152 阅读 · 0 评论 -
【数据结构系列】——LFU缓存淘汰算法(淘汰访问频次最低的数据)
LFU缓存淘汰算法(淘汰使用次数最少)LFU算法相当于把数据按照访问频次进行排序,如果多个数据拥有相同的访问频次,就应删除最早的插入的那个数据,如果访问频次最低的数据有多条,需要淘汰最旧的数据。static class LFUCache{ //构造容量为capacity的缓存 public LFUCache(int capacity){ } //在缓存中查询key public int get(int key){ }原创 2021-04-10 11:29:09 · 790 阅读 · 0 评论 -
【❤重点❤】【数据结构系列】——LRU缓存淘汰算法
146. LRU 缓存机制LRU缓存淘汰算法LRU 算法实际上是让你设计数据结构:首先要接收一个 capacity 参数作为缓存的最大容量, 然后实现两个 API, 一个是 put(key, val) 方法存入键值对, 另一个是 get(key) 方法获取 key 对应的 val, 如果 key 不存在则返回-1。LRU 缓存算法的核心数据结构就是哈希链表, 双向链表和哈希表的结合体。cache这个数据结构必备条件:显然cache中的元素必须有时序,以区分最近使用的和长久未使用的数据,当容量满原创 2021-04-09 11:18:27 · 106 阅读 · 0 评论 -
LeetCode - 106. 从中序与后序遍历序列构造二叉树
106. 从中序与后序遍历序列构造二叉树题目描述根据一棵树的中序遍历与后序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出中序遍历 inorder = [9,3,15,20,7]后序遍历 postorder = [9,15,7,20,3]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解题思路//根据一棵树的中序遍历与后序遍历构造二叉树。 //// 注意: //你可以假设树中没有重复的元素。 //// 例如,给出原创 2021-04-01 20:08:11 · 94 阅读 · 0 评论 -
LeetCode- 105. 从前序与中序遍历序列构造二叉树
105. 从前序与中序遍历序列构造二叉树题目描述根据一棵树的前序遍历与中序遍历构造二叉树。注意:你可以假设树中没有重复的元素。例如,给出前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7]返回如下的二叉树: 3 / \ 9 20 / \ 15 7解题思路//根据一棵树的前序遍历与中序遍历构造二叉树。 //// 注意: //你可以假设树中没有重复的元素。 //// 例如,给出原创 2021-04-01 20:07:06 · 95 阅读 · 0 评论 -
【动态规划】LeetCode - 494. 目标和——回溯法、动态规划
494. 目标和题目描述给定一个非负整数数组,a1, a2, …, an, 和一个目标数,S。现在你有两个符号 + 和 -。对于数组中的任意一个整数,你都可以从 + 或 -中选择一个符号添加在前面。返回可以使最终数组和为目标数 S 的所有添加符号的方法数。示例:输入:nums: [1, 1, 1, 1, 1], S: 3输出:5解释:-1+1+1+1+1 = 3+1-1+1+1+1 = 3+1+1-1+1+1 = 3+1+1+1-1+1 = 3+1+1+1+1-1 = 3一共有5种原创 2021-04-01 20:02:23 · 192 阅读 · 0 评论 -
【动态规划】——打家劫舍问题
线性排列情况——打家劫舍I198. 打家劫舍题目描述你是一个专业的小偷,计划偷窃沿街的房屋。每间房内都藏有一定的现金,影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你 不触动警报装置的情况下 ,一夜之内能够偷窃到的最高金额。示例 1:输入:[1,2,3,1]输出:4解释:偷窃 1 号房屋 (金额 = 1) ,然后偷窃 3 号房屋 (金额 = 3)。偷窃到的最高金额 = 1原创 2021-03-30 21:14:20 · 317 阅读 · 0 评论 -
【动态规划之背包问题】——完全背包问题(518. 零钱兑换 II)
完全背包问题518. 零钱兑换 II题目描述给定不同面额的硬币和一个总金额。写出函数来计算可以凑成总金额的硬币组合数。假设每一种面额的硬币有无限个。示例 1:输入: amount = 5, coins = [1, 2, 5]输出: 4解释: 有四种方式可以凑成总金额:5=55=2+2+15=2+1+1+15=1+1+1+1+1示例 2:输入: amount = 3, coins = [2]输出: 0解释: 只用面额2的硬币不能凑成总金额3。示例 3:输入: amount =原创 2021-03-28 21:36:56 · 150 阅读 · 0 评论 -
【动态规划之背包问题】——子集背包(416. 分割等和子集)
背包问题变体之子集分割416. 分割等和子集题目描述给定一个只包含正整数的非空数组。是否可以将这个数组分割成两个子集,使得两个子集的元素和相等。注意:每个数组中的元素不会超过 100数组的大小不会超过 200示例 1:输入: [1, 5, 11, 5]输出: true解释: 数组可以分割成 [1, 5, 5] 和 [11].示例 2:输入: [1, 2, 3, 5]输出: false解释: 数组不能分割成两个元素和相等的子集.解题思路(1)对于这个问题, 我们可以先对集合求原创 2021-03-28 21:24:24 · 313 阅读 · 0 评论 -
【动态规划之背包问题】——0-1背包问题
0 - 1 背包问题给你一个可装载重量为 W 的背包和 N 个物品, 每个物品有重量和价值两个属性。 其中第 i 个物品的重量为 wt[i] , 价值为 val[i] , 现在让你用这个背包装物品, 最多能装的价值是多少?例如:N = 3, W = 4wt = [2, 1, 3]val = [4, 2, 3]返回: 6动态规划的套路:要明确两点, 「状态」 和「选择」 。状态有两个, 就是「背包的容量」 和「可选择的物品」 。选择就是「装进背包」 或者「不装进背包」 。框架:原创 2021-03-28 21:14:03 · 288 阅读 · 0 评论 -
【动态规划】LeetCode - 312. 戳气球
312. 戳气球题目描述有 n 个气球,编号为0 到 n - 1,每个气球上都标有一个数字,这些数字存在数组 nums 中。现在要求你戳破所有的气球。戳破第 i 个气球,你可以获得 nums[i - 1] * nums[i] * nums[i + 1] 枚硬币。 这里的 i - 1 和 i + 1 代表和 i 相邻的两个气球的序号。如果 i - 1或 i + 1 超出了数组的边界,那么就当它是一个数字为 1 的气球。求所能获得硬币的最大数量。示例 1:输入:nums = [3,1,5,8]输出原创 2021-03-26 22:00:27 · 117 阅读 · 0 评论 -
【动态规划】LeetCode - 139. 单词拆分——DFS、BFS、DP
139. 单词拆分题目描述给定一个非空字符串 s 和一个包含非空单词的列表 wordDict,判定 s 是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重复使用字典中的单词。你可以假设字典中没有重复的单词。示例 1:输入: s = “leetcode”, wordDict = [“leet”, “code”]输出: true解释: 返回 true 因为 “leetcode” 可以被拆分成 “leet code”。示例 2:输入: s = “applepenapple”原创 2021-03-26 21:59:10 · 179 阅读 · 0 评论 -
【单调栈】 LeetCode - 503. 下一个更大元素 II
503. 下一个更大元素 II题目描述给定一个循环数组(最后一个元素的下一个元素是数组的第一个元素),输出每个元素的下一个更大元素。数字 x 的下一个更大的元素是按数组遍历顺序,这个数字之后的第一个比它更大的数,这意味着你应该循环地搜索它的下一个更大的数。如果不存在,则输出 -1。示例 1:输入: [1,2,1]输出: [2,-1,2]解释: 第一个 1 的下一个更大的数是 2;数字 2 找不到下一个更大的数;第二个 1 的下一个最大的数需要循环搜索,结果也是 2。解题思路单调栈原创 2021-03-25 19:35:35 · 125 阅读 · 0 评论 -
【单调栈】 LeetCode - 496. 下一个更大元素 I
496. 下一个更大元素 I题目描述给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位置输出 -1 。示例 1:输入: nums1 = [4,1,2], nums2 = [1,3,4,2].输出: [-1,3,-1]解释:对于 num1 中的数字原创 2021-03-25 19:32:51 · 66 阅读 · 0 评论 -
【单调栈】LeetCode - 456 . 132模式
456. 132 模式题目描述给你一个整数数组 nums ,数组中共有 n 个整数。132 模式的子序列 由三个整数 nums[i]、nums[j] 和 nums[k] 组成,并同时满足:i < j < k 和 nums[i] < nums[k] < nums[j] 。如果 nums 中存在 132 模式的子序列 ,返回 true ;否则,返回 false 。进阶:很容易想到时间复杂度为 O(n^2) 的解决方案,你可以设计一个时间复杂度为 O(n logn) 或 O(n)原创 2021-03-25 19:26:46 · 94 阅读 · 0 评论 -
【动态规划】四键键盘 两键键盘
650. 只有两个键的键盘题目描述-四键键盘解题思路状态转移:第一个状态是剩余的按键次数, 用n 表示;第二个状态是当前屏幕上字符 A 的数量, 用a_num 表示;第三个状态是剪切板中字符 A 的数量, 用copy 表示。base case: 当剩余次数 n 为 0 时, a_num就是我们想要的答案。dp(n - 1, a_num + 1, copy), # A解释: 按下 A 键, 屏幕上加⼀个字符同时消耗 1 个操作数dp(n - 1, a_num + copy, co原创 2021-03-24 21:33:43 · 133 阅读 · 0 评论 -
【动态规划】高楼扔鸡蛋
887. 鸡蛋掉落题目描述给你 k 枚相同的鸡蛋,并可以使用一栋从第 1 层到第 n 层共有 n 层楼的建筑。已知存在楼层 f ,满足 0 <= f <= n ,任何从 高于 f 的楼层落下的鸡蛋都会碎,从 f 楼层或比它低的楼层落下的鸡蛋都不会破。每次操作,你可以取一枚没有碎的鸡蛋并把它从任一楼层 x 扔下(满足 1 <= x <= n)。如果鸡蛋碎了,你就不能再次使用它。如果某枚鸡蛋扔下后没有摔碎,则可以在之后的操作中 重复使用 这枚鸡蛋。请你计算并返回要确定 f 确切原创 2021-03-24 21:09:26 · 302 阅读 · 0 评论 -
【动态规划】以最小插入次数构造回文串
以最小插入次数构造回文串题目描述比如输入“s = abcea” ,算法返回2,因为可以给s插入2个字符变成回文串“abeceba” 或者“aebcbea” 。如果输入s = “aba”,则算法返回0,因为s已经是回文串,不用插入任何字符。解题思路base case:当i == j 时,dp[i][j] = 0;因为当i == j 时 s[i...j]就是一个字符,本身就是回文串,所以不需要进行任何插入操作。当s[i] != s[j] 时,插入两次肯定可以让s[i...j]变成回文串,但是不一定是插原创 2021-03-21 17:04:19 · 334 阅读 · 0 评论 -
【动态规划】LeetCode - 96. 不同的二叉搜索树
96. 不同的二叉搜索树题目描述给定一个整数 n,求以 1 … n 为节点组成的二叉搜索树有多少种?示例:输入: 3输出: 5解释:给定 n = 3, 一共有 5 种不同结构的二叉搜索树: 1 3 3 2 1 \ / / / \ \ 3 2 1 1 3 2 / / \ \ 2原创 2021-03-19 22:13:02 · 61 阅读 · 0 评论 -
【动态规划】LeetCode - 516. 最长回文子序列
516. 最长回文子序列题目描述给定一个字符串 s ,找到其中最长的回文子序列,并返回该序列的长度。可以假设 s 的最大长度为 1000 。示例 1:输入:“bbbab”输出:4一个可能的最长回文子序列为 “bbbb”。示例 2:输入:“cbbd”输出:2一个可能的最长回文子序列为 “bb”。解题思路class Solution { public int longestPalindromeSubseq(String s) { int n = s.le原创 2021-03-18 20:28:39 · 134 阅读 · 0 评论 -
【动态规划】—— LeetCode - 72. 编辑距离
72. 编辑距离题目描述给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作:插入一个字符删除一个字符替换一个字符示例 1:输入:word1 = “horse”, word2 = “ros”输出:3解释:horse -> rorse (将 ‘h’ 替换为 ‘r’)rorse -> rose (删除 ‘r’)rose -> ros (删除 ‘e’)示例 2:输入:word1原创 2021-03-18 09:18:35 · 236 阅读 · 0 评论 -
【动态规划】——1143. 最长公共子序列
1143. 最长公共子序列题目描述给定两个字符串 text1 和 text2,返回这两个字符串的最长公共子序列的长度。一个字符串的 子序列 是指这样一个新的字符串:它是由原字符串在不改变字符的相对顺序的情况下删除某些字符(也可以不删除任何字符)后组成的新字符串。例如,“ace” 是 “abcde” 的子序列,但 “aec” 不是 “abcde” 的子序列。两个字符串的「公共子序列」是这两个字符串所共同拥有的子序列。若这两个字符串没有公共子序列,则返回 0。示例 1:输入:text1 = “ab原创 2021-03-16 22:31:13 · 144 阅读 · 0 评论 -
2020-2021年度第二届全国大学生算法设计与编程挑战赛(冬季赛)——正式赛(Java语言题目解析)
目录这事热身赛排列巨人三子棋钻石这是正式赛A - 塔B - 日记D - 质数区间E - 神仙爱采药F - 但更爱字符串I - 奇怪的传输机增加了J - 奇怪的小鸭子也增加了K - 关于哥俩好这事L - 我们未知的那窝蛋的名字(难)附上这些题目的链接这事热身赛排列巨人题目描述:有12个数字,分别是1~12。计算并输出这12个数字的全排列的种类数。解题思路:由题意知:题目实际要求1~12全排列的种类数。由简单的数学知识我们知道:1~12的全排列的种类数为 12 !package conte原创 2021-03-14 22:49:29 · 5578 阅读 · 4 评论