
算法
Skyed.blue
写写博客,记录足迹
展开
-
校门外的树 (合并区间,线段树)
https://www.luogu.com.cn/problem/P1047思路分析:因为最后只需要一次查询,因此一个直观的想法是将所有的区间合并,用总数减去区间长度即可。关键就是如何合并区间,这个可能不太好想,需要点思维。总体时间复杂度O(nlgn)合并区间可以参考这篇博客:https://blog.csdn.net/Skyed_blue/article/details/109467628#include <iostream>#include <algorithm>.原创 2020-11-03 13:55:36 · 293 阅读 · 0 评论 -
四方定理 (dp,二维费用背包)
思路分析:我一开始没往背包那想,我想的是dp[i][j]表示 i 值 剩余 j 次分解位的方案总数。第一层 for 遍历 i 值 (1-32768)第二层for 遍历 j 分解位个数 (0-4)第三层for 遍历 k 平方数 (1-sqrt(i))dp[i][j] = dp[i-k*k][j-1]这样写理论上可以实现,但是无法去重。假设i=5, j=1,k 可以取 1, 2. k取1就由dp[4][0]推来,k取2就由dp[1][0]推来。这样就包含了[1,2]和[2,1]两种情况。后来看.原创 2020-10-30 12:21:28 · 353 阅读 · 0 评论 -
摆花 (dp,背包,各种优化)
题目描述小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共m盆。通过调查顾客的喜好,小明列出了顾客最喜欢的n种花,从1到n标号。为了在门口展出更多种花,规定第i种花不能超过ai 盆,摆花时同一种花放在一起,且不同种类的花需按标号的从小到大的顺序依次摆列。试编程计算,一共有多少种不同的摆花方案。输入格式第一行包含两个正整数n和m,中间用一个空格隔开。第二行有n个整数,每两个整数之间用一个空格隔开,依次表示a1,a2,…,an输出格式一个整数,表示有多少种方案。注意:因为方案数可能很原创 2020-10-30 11:40:28 · 301 阅读 · 0 评论 -
【蓝桥杯】k倍区间 (前缀和+分析+数论)
资源限制时间限制:2.0s 内存限制:256.0MB问题描述 给定一个长度为N的数列,A1, A2, … AN,如果其中一段连续的子序列Ai, Ai+1, … Aj(i <= j)之和是K的倍数,我们就称这个区间[i, j]是K倍区间。你能求出数列中总共有多少个K倍区间吗?输入格式 第一行包含两个整数N和K。(1 <= N, K <= 100000) 以下N行每行包含一个整数Ai。(1 <= Ai <= 100000)输出格式 输出一个整数,代表K原创 2020-10-13 21:10:13 · 377 阅读 · 0 评论 -
【蓝桥杯】分巧克力 (二分)
资源限制时间限制:1.0s 内存限制:256.0MB问题描述儿童节那天有K位小朋友到小明家做客。小明拿出了珍藏的巧克力招待小朋友们。小明一共有N块巧克力,其中第i块是Hi x Wi的方格组成的长方形。为了公平起见,小明需要从这 N 块巧克力中切出K块巧克力分给小朋友们。切出的巧克力需要满足:形状是正方形,边长是整数大小相同例如一块6x5的巧克力可以切出6块2x2的巧克力或者2块3x3的巧克力。当然小朋友们都希望得到的巧克力尽可能大,你能帮小Hi计算出最大的边长是多少么?输入格式原创 2020-10-13 20:05:59 · 286 阅读 · 0 评论 -
Stall Reservations (贪心, 区间问题)
Stall ReservationsOh those picky N (1 <= N <= 50,000) cows! They are so picky that each one will only be milked over some precise time interval A…B (1 <= A <= B <= 1,000,000), which in...原创 2020-03-13 13:34:32 · 566 阅读 · 0 评论 -
OpenJ_Bailian - 4151 电影节 (贪心)
大学生电影节在北大举办! 这天,在北大各地放了多部电影,给定每部电影的放映时间区间,区间重叠的电影不可能同时看(端点可以重合),问李雷最多可以看多少部电影。Input多组数据。每组数据开头是n(n<=100),表示共n场电影。接下来n行,每行两个整数(0到1000之间),表示一场电影的放映区间n=0则数据结束Output对每组数据输出最多能看几部电影Sample Input8...原创 2020-03-13 12:05:28 · 325 阅读 · 0 评论 -
【leetcode】跳跃游戏 II (贪心)
给定一个非负整数数组,你最初位于数组的第一个位置。数组中的每个元素代表你在该位置可以跳跃的最大长度。你的目标是使用最少的跳跃次数到达数组的最后一个位置。示例:输入: [2,3,1,1,4]输出: 2解释: 跳到最后一个位置的最小跳跃数是 2。从下标为 0 跳到下标为 1 的位置,跳 1 步,然后跳 3 步到达数组的最后一个位置。说明:假设你总是可以到达数组的最后一个位置。链接:...原创 2020-03-11 20:33:36 · 463 阅读 · 0 评论 -
【leetcode】子集(dfs,位运算)
给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集)。说明:解集不能包含重复的子集。示例:输入: nums = [1,2,3]输出:[[3],[1],[2],[1,2,3],[1,3],[2,3],[1,2],[]]链接:https://leetcode-cn.com/problems/subsetsdfs生成子集:class Solutio...原创 2020-03-10 12:15:39 · 265 阅读 · 0 评论 -
【leetcode】最多可以参加的会议数目 (小顶堆+贪心)
给你一个数组 events,其中 events[i] = [startDayi, endDayi] ,表示会议 i 开始于 startDayi ,结束于 endDayi 。你可以在满足 startDayi <= d <= endDayi 中的任意一天 d 参加会议 i 。注意,一天只能参加一个会议。请你返回你可以参加的 最大 会议数目。示例 1:输入:events = [[1,...原创 2020-02-16 17:05:35 · 800 阅读 · 0 评论 -
【leetcode】使数组严格递增 (dp+二分)
给你两个整数数组 arr1 和 arr2,返回使 arr1 严格递增所需要的最小「操作」数(可能为 0)。每一步「操作」中,你可以分别从 arr1 和 arr2 中各选出一个索引,分别为 i 和 j,0 <= i < arr1.length 和 0 <= j < arr2.length,然后进行赋值运算 arr1[i] = arr2[j]。如果无法让 arr1 严格递增...原创 2020-02-13 21:51:45 · 707 阅读 · 0 评论 -
一个人的旅行(hdu2066) (最短路模板题)
虽然草儿是个路痴(就是在杭电待了一年多,居然还会在校园里迷路的人,汗~),但是草儿仍然很喜欢旅行,因为在旅途中 会遇见很多人(白马王子,0),很多事,还能丰富自己的阅历,还可以看美丽的风景……草儿想去很多地方,她想要去东京铁塔看夜景,去威尼斯看电影,去阳明山上看海芋,去纽约纯粹看雪景,去巴黎喝咖啡写信,去北京探望孟姜女……眼看寒假就快到了,这么一大段时间,可不能浪费啊,一定要给自己好好的放个假,可...原创 2020-01-28 22:06:34 · 432 阅读 · 0 评论 -
【leetcode】分割数组的最大值(二分枚举)
给定一个非负整数数组和一个整数 m,你需要将这个数组分成 m 个非空的连续子数组。设计一个算法使得这 m 个子数组各自和的最大值最小。注意:数组长度 n 满足以下条件:1 ≤ n ≤ 10001 ≤ m ≤ min(50, n)示例:输入:nums = [7,2,5,10,8]m = 2输出:18解释:一共有四种方法将nums分割为2个子数组。其中最好的方式是将其分为[7...原创 2020-01-27 20:34:49 · 331 阅读 · 0 评论 -
【leetcode】构建回文串检测(前缀思想+分析)
给你一个字符串 s,请你对 s 的子串进行检测。每次检测,待检子串都可以表示为 queries[i] = [left, right, k]。我们可以 重新排列 子串 s[left], …, s[right],并从中选择 最多 k 项替换成任何小写英文字母。如果在上述检测过程中,子串可以变成回文形式的字符串,那么检测结果为 true,否则结果为 false。返回答案数组 answer[],其中...原创 2020-01-24 22:15:59 · 288 阅读 · 1 评论 -
【leetcode】网格中的最短路径 (bfs)
给你一个 m * n 的网格,其中每个单元格不是 0(空)就是 1(障碍物)。每一步,您都可以在空白单元格中上、下、左、右移动。如果您 最多 可以消除 k 个障碍物,请找出从左上角 (0, 0) 到右下角 (m-1, n-1) 的最短路径,并返回通过该路径所需的步数。如果找不到这样的路径,则返回 -1。示例 1:输入:grid =[[0,0,0],[1,1,0],[0,0,0],[...原创 2019-12-15 23:28:34 · 2254 阅读 · 0 评论 -
【leetcode】使结果不超过阈值的最小除数 (二分枚举)
给你一个整数数组 nums 和一个正整数 threshold ,你需要选择一个正整数作为除数,然后将数组里每个数都除以它,并对除法结果求和。请你找出能够使上述结果小于等于阈值 threshold 的除数中 最小 的那个。每个数除以除数后都向上取整,比方说 7/3 = 3 , 10/2 = 5 。题目保证一定有解。示例 1:输入:nums = [1,2,5,9], threshold =...原创 2019-12-08 17:23:00 · 367 阅读 · 0 评论 -
【leetcode】停留在原地的方案数(dp)
有一个长度为 arrLen 的数组,开始有一个指针在索引 0 处。每一步操作中,你可以将指针向左或向右移动 1 步,或者停在原地(指针不能被移动到数组范围外)。给你两个整数 steps 和 arrLen ,请你计算并返回:在恰好执行 steps 次操作以后,指针仍然指向索引 0 处的方案数。由于答案可能会很大,请返回方案数 模 10^9 + 7 后的结果。示例 1:输入:steps = ...原创 2019-12-07 20:58:13 · 430 阅读 · 0 评论 -
【leetcode】K 次串联后最大子数组之和 (前缀和,后缀和,分类讨论)
给你一个整数数组 arr 和一个整数 k。首先,我们要对该数组进行修改,即把原数组 arr 重复 k 次。举个例子,如果 arr = [1, 2] 且 k = 3,那么修改后的数组就是 [1, 2, 1, 2, 1, 2]。然后,请你返回修改后的数组中的最大的子数组之和。注意,子数组长度可以是 0,在这种情况下它的总和也是 0。由于 结果可能会很大,所以需要 模(mod) 10^9 + ...原创 2019-12-04 21:58:51 · 296 阅读 · 0 评论 -
【leetcode】删除字符串中的所有相邻重复项II (双指针, 细节)
给你一个字符串 s,「k 倍重复项删除操作」将会从 s 中选择 k 个相邻且相等的字母,并删除它们,使被删去的字符串的左侧和右侧连在一起。你需要对 s 重复进行无限次这样的删除操作,直到无法继续为止。在执行完所有删除操作后,返回最终得到的字符串。本题答案保证唯一。示例 1:输入:s = “abcd”, k = 2输出:“abcd”解释:没有要删除的内容。示例 2:输入:s = “...原创 2019-12-03 16:58:55 · 723 阅读 · 0 评论 -
【leetcode】尽可能使字符串相等(滑动窗口)
给你两个长度相同的字符串,s 和 t。将 s 中的第 i 个字符变到 t 中的第 i 个字符需要 |s[i] - t[i]| 的开销(开销可能为 0),也就是两个字符的 ASCII 码值的差的绝对值。用于变更字符串的最大预算是 maxCost。在转化字符串时,总开销应当小于等于该预算,这也意味着字符串的转化可能是不完全的。如果你可以将 s 的子字符串转化为它在 t 中对应的子字符串,则返回可...原创 2019-12-03 15:49:17 · 369 阅读 · 0 评论 -
Can you solve this equation? (二分)
Now,given the equation 8x^4 + 7x^3 + 2x^2 + 3x + 6 == Y,can you find its solution between 0 and 100;Now please try your lucky.InputThe first line of the input contains an integer T(1<=T<=100)...原创 2019-12-02 18:00:12 · 264 阅读 · 0 评论 -
【leetcode】丑数III (二分枚举+容斥定理)
请你帮忙设计一个程序,用来找出第 n 个丑数。丑数是可以被 a 或 b 或 c 整除的 正整数。示例 1:输入:n = 3, a = 2, b = 3, c = 5输出:4解释:丑数序列为 2, 3, 4, 5, 6, 8, 9, 10… 其中第 3 个是 4。示例 2:输入:n = 4, a = 2, b = 3, c = 4输出:6解释:丑数序列为 2, 3, 4, 6, 8...原创 2019-12-02 17:16:30 · 648 阅读 · 0 评论 -
【codeforces】sweet Problem (规律,二分)
You have three piles of candies: red, green and blue candies:the first pile contains only red candies and there are rr candies in it,the second pile contains only green candies and there are gg cand...原创 2019-12-02 15:28:53 · 438 阅读 · 0 评论 -
【算法总结】双指针——时间复杂度与空间复杂度的利器!
双指针,就是用两个变量在数组中经过某种形式的移动得到结果的操作。一般时间复杂度为O(n),空间复杂度O(1). 双指针用途广泛,熟悉的归并快排,二分查找就是用的双指针。下面就总结一下双指针这个算法技巧。本文双指针的内容有:双指针的各种类型。双指针的应用。第一部分:我认为双指针一般有两种类型:前后指针,左右指针。**前后指针:**也可以称为快慢指针。假设有两个指针 l 和 r ,l为...原创 2019-11-29 22:23:11 · 5270 阅读 · 0 评论 -
【leetcode】替换后的最长重复字符(滑动窗口)
给你一个仅由大写英文字母组成的字符串,你可以将任意位置上的字符替换成另外的字符,总共可最多替换 k 次。在执行上述操作后,找到包含重复字母的最长子串的长度。注意:字符串长度 和 k 不会超过 104。示例 1:输入:s = “ABAB”, k = 2输出:4解释:用两个’A’替换为两个’B’,反之亦然。示例 2:输入:s = “AABABBA”, k = 1输出:4解...原创 2019-11-29 15:51:40 · 289 阅读 · 0 评论 -
【leetcode】Z字形变换(桶)
将一个给定字符串根据给定的行数,以从上往下、从左到右进行 Z 字形排列。比如输入字符串为 “LEETCODEISHIRING” 行数为 3 时,排列如下:L C I RE T O E S I I GE D H N之后,你的输出需要从左往右逐行读取,产生出一个新的字符串,比如:“LCIRETOESIIGEDHN”。请你实现这个将字符串进行指定行数变换的函数:st...原创 2019-11-23 10:10:45 · 243 阅读 · 0 评论 -
【leetcode】乘积最大子序列 (线性dp)
给定一个整数数组 nums ,找出一个序列中乘积最大的连续子序列(该序列至少包含一个数)。示例 1:输入: [2,3,-2,4]输出: 6解释: 子数组 [2,3] 有最大乘积 6。示例 2:输入: [-2,0,-1]输出: 0解释: 结果不能为 2, 因为 [-2,-1] 不是子数组。链接:https://leetcode-cn.com/problems/maximum-pro...原创 2019-11-21 16:28:25 · 312 阅读 · 0 评论 -
买卖股票的最佳时机(分治,dp)
给定一个数组,它的第 i 个元素是一支给定股票第 i 天的价格。如果你最多只允许完成一笔交易(即买入和卖出一支股票),设计一个算法来计算你所能获取的最大利润。注意你不能在买入股票前卖出股票。示例 1:输入: [7,1,5,3,6,4]输出: 5解释: 在第 2 天(股票价格 = 1)的时候买入,在第 5 天(股票价格 = 6)的时候卖出,最大利润 = 6-1 = 5 。注意利润不能是...原创 2019-11-20 15:50:15 · 1914 阅读 · 1 评论 -
【leetcode】不同的子序列(01背包)
给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,“ACE” 是 “ABCDE” 的一个子序列,而 “AEC” 不是)示例 1:输入: S = “rabbbit”, T = “rabbit”输出: 3解释:如下图所示, 有 3 种可以从 S 中得到 ...原创 2019-11-20 14:52:30 · 236 阅读 · 0 评论 -
【leetcode】解码方法(dp)
一条包含字母 A-Z 的消息通过以下方式进行了编码:‘A’ -> 1‘B’ -> 2…‘Z’ -> 26给定一个只包含数字的非空字符串,请计算解码方法的总数。示例 1:输入: “12”输出: 2解释: 它可以解码为 “AB”(1 2)或者 “L”(12)。示例 2:输入: “226”输出: 3解释: 它可以解码为 “BZ” (2 26), “VF” (2...原创 2019-11-19 15:38:15 · 221 阅读 · 0 评论 -
【leetcode】最长有效括号(线性dp,栈)
给定一个只包含 ‘(’ 和 ‘)’ 的字符串,找出最长的包含有效括号的子串的长度。示例 1:输入: “(()”输出: 2解释: 最长有效括号子串为 “()”示例 2:输入: “)()())”输出: 4解释: 最长有效括号子串为 “()()”链接:https://leetcode-cn.com/problems/longest-valid-parentheses方法一:动态规划 ...原创 2019-11-18 16:08:42 · 295 阅读 · 0 评论 -
【leetcode】最长回文子串(区间dp)
给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为 1000。示例 1:输入: “babad”输出: “bab”注意: “aba” 也是一个有效答案。示例 2:输入: “cbbd”输出: “bb”链接:leetcode原题思路分析:这题是区间dp经典题目。先来看看回文子串的定义:长度为1:a, b. 单个字符就是一个回文串长度为2:aa, bb....原创 2019-11-16 16:54:55 · 408 阅读 · 0 评论 -
最大连续子列和(多种方法)
题目地址在此经典问题,求最大连续区间和。暴力的方法就不说了。这里说三种方法:分治,动态规划,在线处理。方法一:分治 O(nlgn)要求[1,n]的最大连续区间和,可以将区间分成[l,mid],[mid,r],即左右两半。此时,有三种情况。1:该连续区间全部在左半部分。2:该连续区间全部在右半部分。3:该连续区间出现在中间,即a[mid]在区间里。对于情况1,2就是递归左子树,右子...原创 2019-11-14 23:27:40 · 501 阅读 · 0 评论 -
【poj3061】Subsequence (尺取,二分)
SubsequenceTime Limit: 1000MS Memory Limit: 65536KTotal Submissions: 28313 Accepted: 11883DescriptionA sequence of N positive integers (10 < N < 100 000), each of them less than or equal 1...原创 2019-11-13 20:11:21 · 306 阅读 · 0 评论 -
【蓝桥杯】递增三元组 (二分, lower_bound, upper_bound)
有三个数组A,B,C,每个数组中有n个数,你可以从每个数组中找一个数,使得Ai<Bj<Ck ,(1<=I,j,k<=n)(1<=n<=100000,1<=Ai,Bj,Ck<=1000000),求最多可以组出多少三元组Input有多组输入第一行输入n接下来三行输入A,B,C三个数组,每个数组n个数Output每行一个整数,表示最多有多少三元...原创 2019-11-11 18:27:31 · 374 阅读 · 0 评论 -
【蓝桥杯】明码(运算符, 进制转换)
汉字的字形存在于字库中,即便在今天,16点阵的字库也仍然使用广泛。16点阵的字库把每个汉字看成是16x16个像素信息。并把这些信息记录在字节中。一个字节可以存储8位信息,用32个字节就可以存一个汉字的字形了。把每个字节转为2进制表示,1表示墨迹,0表示底色。每行2个字节,一共16行,布局是:第1字节,第2字节第3字节,第4字节…第31字节, 第32字节1234这道题目是给...原创 2019-11-11 15:29:15 · 314 阅读 · 0 评论 -
【哈夫曼树】构造哈夫曼树(结构体优先队列)
哈夫曼树这里就不介绍了。这里主要是想处理一下自己写构造哈夫曼树时遇到的问题。一开始,我是建了一个存结构体指针的优先队列,以权值为标准从小到大排序,然后选最小和次小节点组成父节点。但是运行后权值的排序是乱的。既不是从小到大也不是从大到小。在找了许多篇博客才终于明白,指针容器是不推荐的。它会有很多问题。但是,我们需要用到优先队列进行O(lgn)的插入,又要存放节点的指针。这该如何操作呢?我们可...原创 2019-11-10 13:49:03 · 822 阅读 · 1 评论 -
【leetcode】合并区间(优先级排序)
给出一个区间的集合,请合并所有重叠的区间。示例 1:输入: [[1,3],[2,6],[8,10],[15,18]]输出: [[1,6],[8,10],[15,18]]解释: 区间 [1,3] 和 [2,6] 重叠, 将它们合并为 [1,6].示例 2:输入: [[1,4],[4,5]]输出: [[1,5]]解释: 区间 [1,4] 和 [4,5] 可被视为重叠区间。思路分析:...原创 2019-11-08 21:04:46 · 387 阅读 · 1 评论 -
【蓝桥杯】发现环(dfs搜环节点)
问题描述 小明的实验室有N台电脑,编号1~N。原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络。在树形网络上,任意两台电脑之间有唯一的路径相连。不过在最近一次维护网络时,管理员误操作使得某两台电脑之间增加了一条数据链接,于是网络中出现了环路。环路上的电脑由于两两之间不再是只有一条路径,使得这些电脑上的数据传输出现了BUG。为了恢复正常传输。小明需要找到所有在环路上的电脑,你能...原创 2019-11-08 17:56:51 · 399 阅读 · 0 评论 -
【蓝桥杯】合根植物(并查集)
问题描述 w星球的一个种植园,被分成 m * n 个小格子(东西方向m行,南北方向n列)。每个格子里种了一株合根植物。 这种植物有个特点,它的根可能会沿着南北或东西方向伸展,从而与另一个格子的植物合成为一体。如果我们告诉你哪些小格子间出现了连根现象,你能说出这个园中一共有多少株合根植物吗?输入格式 第一行,两个整数m,n,用空格分开,表示格子的行数、列数(1<m,n<1...原创 2019-11-05 16:23:07 · 333 阅读 · 0 评论