B5__算法刷题
算法刷题
莫逸风
代码和人生需要加法也需要减法。
Nothing is impossible.
you can never be ready.
展开
-
LeetCode567.字符串的排列
567. 字符串的排列给定两个字符串 s1 和 s2,写一个函数来判断 s2 是否包含 s1 的排列。换句话说,第一个字符串的排列之一是第二个字符串的 子串 。示例 1:输入: s1 = “ab” s2 = “eidbaooo”输出: True解释: s2 包含 s1 的排列之一 (“ba”)..示例 2:输入: s1= “ab” s2 = “eidboaoo” 输出: False解题思路本题相对于是否是子串的区别就在一个地方,如何判定相同长度的子串是否相等。解题要点:1、滑动原创 2021-07-23 09:51:10 · 758 阅读 · 0 评论 -
LeetCode32:最长有效括号
动态规划(DP:Dynamic Programming)是算法的设计方法之一,是在程序设计竞赛中经常被选做的题材。记录结果再利用的“动态规划”动态规划问题的关键在于正确地写出基本的递推关系式和恰当的边界条件(也就是基本方程)。在多阶段决策的过程中,动态规划方法是既把当前一段和未来各段分开,又把当前效益和未来效益结合起来考虑的一种最优化方法。因此,每段决策的选取是从全局来考虑的在求整个问题的最优策略时,由于初始状态时已知的,而每段的策略都是该段状态的函数,故最优策略所经过的各段状态便可以逐次变换得到原创 2021-06-28 02:29:27 · 581 阅读 · 1 评论 -
Fence Repair
农夫约翰为了修理栅栏,要将一块很长的木板切割成N块。 准备切成的木板的长度为L1、 L2 、 … 、LN 切,未切割前木板的长度恰好为切割后木板长度的总和。 每次切断木板时, 需要的开销为这块木板的长度。 例如长度为 21 的木板要切成长度为 5 、 8 、 8 的三块木板。 长21 的木板切成长为 13 和 8 的板时, 开销为 21 。 再将长度为 13 的板切成长度为 5 和 8 的板时, ...原创 2019-03-25 19:48:00 · 957 阅读 · 0 评论 -
Saruman's Army
直线上有N个点。 点i的位置是Xi。从这N个点中选择若干个,给它们加上标记。 对每一个点,其距离为R以内的区域里必须有带有标记的点(自己本身带有标记的点, 可以认为与其距离为 0 的地方有一个带有标记的点)。 在满足这个条件的情况下, 希望能为尽可能少的点添加标记。 请问至少要有多少点被加上标记?输入N = 6R = 10X = (1, 7, 15, 20, 30, 50}输出3j...原创 2019-03-25 19:45:40 · 948 阅读 · 0 评论 -
LeetCoded第21题题解--合并两个有序链表
21. 合并两个有序链表将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。示例:输入:1->2->4, 1->3->4输出:1->1->2->3->4->4题解思路一:暴力解法创建一个head节点创建一个新的链表,并创建一个end节点指向最后一个节点,比较两个升序链表值将end节点指向值较小节点,以此类推。public static ListNode mergeTwoLists(ListN原创 2020-10-12 00:58:44 · 1128 阅读 · 0 评论 -
LeetCoded第25题题解--K个一组翻转链表--java--链表
链表单链表:链表中的每个元素实际上是一个单独的对象,而所有对象都通过每个元素的引用字段链接在一起。双链表:与单链表不同的是,双链表的每个节点都含有两个引用字段。链表优点灵活分配内存空间能在O(1)时间内删除或者添加元素(单链表前提是元素的前一个元素已知,双链表前提是前后元素已知)缺点查询一个元素需要O(n)时间(从头根据引用找到下一个节点)解题技巧利用快慢指针(有时候需要用到三个指针)(例如:链表翻转,寻找倒数第k个元素,寻找链表中间位置的元素,判断链表是否有环)构建一个虚原创 2020-10-12 00:59:39 · 1064 阅读 · 0 评论 -
LeetCoded第242题题解--java--数组
数组数组的优点在于:构建非常简单能在 O(1) 的时间里根据数组的下标(index)查询某个元素而数组的缺点在于:构建时必须分配一段连续的空间查询某个元素是否存在时需要遍历整个数组,耗费 O(n) 的时间(其中,n 是元素的个数)删除和添加某个元素时,同样需要耗费 O(n) 的时间LeetCode 第 242 题:给定两个字符串 s 和 t,编写一个函数来判断 t 是否是 s 的字母异位词。说明:你可以假设字符串只包含小写字母。示例 1输入: s = “anagram”, t原创 2020-09-29 01:54:47 · 1131 阅读 · 0 评论 -
LeetCode42. 接雨水(java)
42.接雨水给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。上面是由数组 [0,1,0,2,1,0,1,3,2,1,2,1] 表示的高度图,在这种情况下,可以接 6 个单位的雨水(蓝色部分表示雨水)。 感谢 Marcos 贡献此图。示例:输入: [0,1,0,2,1,0,1,3,2,1,2,1]输出: 6来源:力扣(LeetCode...原创 2020-04-04 17:30:25 · 1050 阅读 · 0 评论 -
Best Cow Line
给定长度为N的字符串s,要构造一个长度为N的字符串T。起初,T是一个空串,随后反复进行下列任意操作。-从S的头部删除一个字符,加到T的尾部-从S的尾部删除一个宇符,加到T的尾部目标是要构造字典序尽可能小的字符串T。输入N = 6S = “ACDBCB”输出ABCBCD不断取S的开头和末尾中较小的一个字符放到邓勺末尾。java实现import java.util.Scanner...原创 2019-03-25 19:37:54 · 1226 阅读 · 1 评论 -
区间调度问题
有n项工作,每项工作分别在Si时间开始,在ti时间结束。对于每项工作,你都可以选择参 与与否。如果选择了参与,那么自始至终都必须全程参与。此外,参与工作的时间段不能重叠(即使是开始的瞬间和结束的瞬间的重叠也是不允许的)。输入n = 5, s = {l, 2, 4, 6, 8), t= {3, 5, 7, 9, 10) (对应上图)输出3贪心: 在可选的工作中, 每次都选取结束时间最早的...原创 2019-03-25 19:11:26 · 825 阅读 · 0 评论 -
硬币问题
有1元、5元、 10元、50元、 100元、500元的硬币各 C1 、 C5 、 C10 、 C50、 C100 、 C500 枚。 现在要用这些硬币来支付A元, 最少需要多少枚硬币?假定本题至少存在一种支付方案。输入C1 = 3, C5 = 2, C10 = 1, C50 = 3, C100 = 0, C500 = 2, A = 620输出6该算法可以说是贪心算法中最简单的例子。上节...原创 2019-03-25 19:07:17 · 909 阅读 · 0 评论 -
迷宫最短路径
给定一个大小为 N×M的迷宫。迷宫由通道和墙壁组成,每一步可以向邻接的上下左右四格的通道移动。请求出从起点到终点所需的最小步数。请注意,本题假定从起点一定可以移动到终点。限制条件N, M ≤ 100输入1010#S######.#......#..#.#.##.##.#.#........##.##.####....#....#.#######.#....#.........原创 2019-03-25 18:59:05 · 1718 阅读 · 0 评论 -
Lake Counting
有一个大小为 N×M的园子,雨后积起了水。八连通的积水被认为是连接在一起的。请求出园子里总共有多少水洼?(八连通指的是下图中相对 W 的*的部分)*** *W* ***限制条件N, M ≤ 100输入N=10, M=12园子如下图(‘W’表示积水,’.'表示没有积水)W........WW..WWW.....WWW....WW...WW..........WW........原创 2019-03-25 18:39:35 · 767 阅读 · 0 评论 -
部分和问题
给定整数 a1、a2、…、an,判断是否可以从中选出若干数,使它们的和恰好为 k。限制条件 1 ≤ n ≤ 20 108 ≤ ai ≤ 108 108 ≤ k ≤ 108输入n=4a={1,2,4,7}k=13输出Yes提示:另一组输入k=15输出为no从a1开始按顺序决定每个数加或不加,在全部n个数都决定后再判断它们的和是不是k即可。因为状态数是2n+1,所以...原创 2019-03-25 16:36:48 · 1206 阅读 · 0 评论 -
区间k大数训练
问题描述给定一个序列,每次询问序列中第l个数到第r个数中第K大的数是哪个。输入格式第一行包含一个数n,表示序列长度。第二行包含n个正整数,表示给定的序列。第三个包含一个正整数m,表示询问个数。接下来m行,每行三个数l,r,K,表示询问序列从左往右第l个数到第r个数中,从大往小第K大的数是哪个。序列元素从1开始标号。输出格式总共输出m行,每行一个数,表示询问的答案。样例输入51...原创 2019-03-25 15:57:12 · 758 阅读 · 0 评论 -
蓝桥杯基础练习-数列排序
问题描述给定一个长度为n的数列,将这个数列按从小到大的顺序排列。1<=n<=200输入格式第一行为一个整数n。 第二行包含n个整数,为待排序的数,每个整数的绝对值小于10000。输出格式输出一行,按从小到大的顺序输出排序后的数列。样例输入58 3 6 4 9样例输出3 4 6 8 9Java实现import java.util.Arrays;import ...原创 2019-03-25 15:06:47 · 1266 阅读 · 0 评论 -
蓝桥杯基础练习-特殊的回文数
问题描述123321是一个非常特殊的数,它从左边读和从右边读是一样的。 输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。输入格式输入一行,包含一个正整数n。输出格式按从小到大的顺序输出满足条件的整数,每个整数占一行。样例输入52样例输出899998989989998899数据规模和约定1<=n<=54。java实现im...原创 2019-03-25 15:04:46 · 798 阅读 · 0 评论 -
蓝桥杯基础练习-回文数
问题描述1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。输出格式按从小到大的顺序输出满足条件的四位十进制数。java实现public class Main { // 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。 public static void main(String[] args) { //...原创 2019-03-25 15:01:39 · 1047 阅读 · 0 评论 -
蓝桥杯基础练习-特殊的数字
问题描述153是一个非常特殊的数,它等于它的每位数字的立方和,即153=111+555+333。编程求所有满足这种条件的三位十进制数。输出格式按从小到大的顺序输出满足条件的三位十进制数,每个数占一行。java实现public class Main { public static void main(String[] args) { // TODO Auto-generated m...原创 2019-03-25 15:00:13 · 827 阅读 · 0 评论 -
蓝桥杯基础练习-杨辉三角
问题描述杨辉三角形又称Pascal三角形,它的第i+1行是(a+b)i的展开式的系数。它的一个重要性质是:三角形中的每个数字等于它两肩上的数字相加。下面给出了杨辉三角形的前4行:11 11 2 11 3 3 1给出n,输出它的前n行。输入格式输入包含一个数n。输出格式输出杨辉三角形的前n行。每一行从这一行的第一个数开始依次输出,中间使用一个空格分隔。请不要在前面输出多余的空...原创 2019-03-25 14:57:37 · 951 阅读 · 0 评论 -
蓝桥杯基础练习-查找整数
问题描述给出一个包含n个整数的数列,问整数a在数列中的第一次出现是第几个。输入格式第一行包含一个整数n。第二行包含n个非负整数,为给定的数列,数列中的每个数都不大于10000。第三行包含一个整数a,为待查找的数。输出格式如果a在数列中出现了,输出它第一次出现的位置(位置从1开始编号),否则输出-1。样例输入61 9 4 8 3 99样例输出2数据规模与约定1 <...原创 2019-03-25 14:55:13 · 909 阅读 · 0 评论 -
蓝桥杯题库基础训练-数列特征
问题描述给出n个数,找出这n个数的最大值,最小值,和。输入格式第一行为整数n,表示数的个数。第二行有n个数,为给定的n个数,每个数的绝对值都小于10000。输出格式输出三行,每行一个整数。第一行表示这些数中的最大值,第二行表示这些数中的最小值,第三行表示这些数的和。样例输入51 3 -2 4 5样例输出5-211数据规模与约定1 <= n <= 10000...原创 2019-03-25 14:53:07 · 742 阅读 · 0 评论 -
蓝桥杯题库基础练习字母图形
问题描述利用字母可以组成一些美丽的图形,下面给出了一个例子:ABCDEFGBABCDEFCBABCDEDCBABCDEDCBABC这是一个5行7列的图形,请找出这个图形的规律,并输出一个n行m列的图形。输入格式输入一行,包含两个整数n和m,分别表示你要输出的图形的行数的列数。输出格式输出n行,每个m个字符,为你的图形。样例输入5 7样例输出ABCDEFGBABCDE...原创 2019-03-25 14:40:22 · 869 阅读 · 0 评论 -
LeetCoded第206题题解--反转链表
反转一个单链表。示例输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL方法一:递归自始至终每个递归返回的都应该是最后一个节点,每次递归将head.next指向head代码 public static ListNode reverseList(ListNode head) { if (head==null||head.next==null){ ret原创 2020-10-18 17:18:33 · 1134 阅读 · 0 评论 -
LeetCoded第20题题解--有效的括号
有效的括号给定一个只包括 ‘(’,’)’,’{’,’}’,’[’,’]’ 的字符串,判断字符串是否有效。有效字符串需满足:左括号必须用相同类型的右括号闭合。左括号必须以正确的顺序闭合。注意空字符串可被认为是有效字符串。示例 1:输入: “()”输出: true示例 2:输入: “()[]{}”输出: true示例 3:输入: “(]”输出: false示例 4:输入: “([)]”输出: false示例 5:输入: “{[]}”输出: true这个题目很简单,只需要原创 2020-10-18 19:58:23 · 1101 阅读 · 0 评论 -
LeetCoded第739题题解--每日温度
每日温度请根据每日 气温 列表,重新生成一个列表。对应位置的输出为:要想观测到更高的气温,至少需要等待的天数。如果气温在这之后都不会升高,请在该位置用 0 来代替。例如,给定一个列表 temperatures = [73, 74, 75, 71, 69, 72, 76, 73],你的输出应该是 [1, 1, 4, 2, 1, 1, 0, 0]。提示:气温 列表长度的范围是 [1, 30000]。每个气温的值的均为华氏度,都是在 [30, 100] 范围内的整数。解题思路一、针对数组中每个数据依次向原创 2020-10-18 22:06:34 · 1221 阅读 · 0 评论 -
LeetCoded第239题题解--滑动窗口最大值
滑动窗口最大值给定一个数组 nums,有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。返回滑动窗口中的最大值。进阶:你能在线性时间复杂度内解决此题吗?示例:输入: nums = [1,3,-1,-3,5,3,6,7], 和 k = 3输出: [3,3,5,5,6,7]解释:滑动窗口的位置 最大值[1 3 -1] -3 5 3 6 7 31 [3 -原创 2020-10-24 23:22:23 · 1303 阅读 · 0 评论 -
LeetCoded第2题题解--两数相加
2.两数相加给出两个 非空 的链表用来表示两个非负的整数。其中,它们各自的位数是按照 逆序 的方式存储的,并且它们的每个节点只能存储 一位 数字。如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。您可以假设除了数字 0 之外,这两个数都不会以 0 开头。.示例:输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)输出:7 -> 0 -> 8原因:342 + 465 = 807思路简单的链表问题,遍历链表,设置合适的跳出条原创 2020-10-29 00:59:30 · 1037 阅读 · 0 评论