自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 收藏
  • 关注

原创 CSP-202303-2-垦田计划

CCF第二题的套路感觉就是下手之前先想清楚哪部分能优化,现在的第二题感觉都是些递归的思想,题目要求我们把开垦时间缩短为最小天数,同时还要满足不能小于给定的最小天数,判断如何缩短当前最大天数,仅需知道如果要缩减这一天需要消耗多少的资源 ,与当前剩余资源比较即可得知能否缩减当天。据估算,其中第 i 块(1≤i≤n)区域的开垦耗时为 ti 天。如何维护这个数组便是我们需要思考的问题,要缩减第i天,那么要在第i天消耗的资源数上加上第i+1天消耗的资源数量。输出一个整数,表示开垦 n 块区域的最少耗时。

2023-05-22 21:40:52 751

原创 CSP-202212-2 训练计划

大部分科目的训练可以同时进行,即顿顿在同一天内可以同时进行多项科目的训练,但部分科目之间也存在着依赖关系。如果科目 i 依赖科目 j,那么只能在后者训练结束后,科目 i 才能开始训练。还好,顿顿需要训练的 m 项科目依赖关系并不复杂,每项科目最多只依赖一项别的科目,且满足依赖科目的编号小于自己。具体来说,科目 5 依赖科目 2、科目 2 又依赖于科目 1,因此科目 5 最早可以从第 4 天开始训练。2)最晚开始时间:在不耽误参赛的前提下(n 天内完成所有训练),该科目最晚可以从哪一天开始训练?

2023-05-13 12:06:54 567

原创 CCF-202209-2-何以包邮?01背包

新学期伊始,适逢顿顿书城有购书满 x 元包邮的活动,小 P 同学欣然前往准备买些参考书。一番浏览后,小 P 初步筛选出 n 本书加入购物车中,其中第 i 本(1≤ i ≤ n)的价格为 a[i] 元。考虑到预算有限,在最终付款前小 P 决定再从购物车中删去几本书(也可以不删),使得剩余图书的价格总和 sum 在满足包邮条件(sum ≥ x)的前提下最小。试帮助小 P 计算,最终选购哪些书可以在凑够 x 元包邮的前提下花费最小?

2023-05-08 12:52:30 684

原创 474. 一和零

其他满足题意但较小的子集包括 {"0001","1"} 和 {"10","1","0"}。解释:最多有 5 个 0 和 3 个 1 的最大子集是 {"10","0001","1","0"} ,因此答案是 4。输入:strs = ["10", "0001", "111001", "1", "0"], m = 5, n = 3。输入:strs = ["10", "0", "1"], m = 1, n = 1。解释:最大的子集是 {"0", "1"} ,所以答案是 2。来源:力扣(LeetCode)

2023-05-07 19:24:00 576

原创 494. 目标和

假设在数字前放加号的数字总和为x,那么放减号的数字总和为sum-x,而目标target = x-(sum-x),即x = (target+sum)/2,那么就将问题转换为了动态规划。例如,nums = [2, 1] ,可以在 2 之前添加 '+' ,在 1 之前添加 '-' ,然后串联起来得到表达式 "+2-1"。如果已经有一个1(nums[i]) ,有 dp[4]种方法 凑成 容量为5的背包。有了nums[i],凑成dp[j]就有dp[j - nums[i]] 种方法。著作权归领扣网络所有。

2023-05-07 18:21:23 451

原创 1049. 最后一块石头的重量 II

仔细阅读题目,可以发现把问题理解透彻后,其实就是将所有的石头分为大小尽可能相似的两堆,这样相撞之后剩下的石头就是最小的。dp[j]表示大小为j的背包最多能放下的石头重量,背包的大小设置为总石头重量的一半,石头的价值等于其重量。= y,那么重量为 x 的石头将会完全粉碎,而重量为 y 的石头新重量为 y-x。组合 2 和 4,得到 2,所以数组转化为 [2,7,1,8,1],组合 7 和 8,得到 1,所以数组转化为 [2,1,1,1],组合 2 和 1,得到 1,所以数组转化为 [1,1,1],

2023-05-06 18:48:31 563

原创 416. 分割等和子集

题目要求判断是否可以将数组分为两个子集,是两个自己的元素和相等,那么只要能找到集合出现sum/2的子集和,就说明可以分割成两个相同元素的子集。所以递推公式:dp[j] = max(dp[j], dp[j - nums[i]] + nums[i]);本题中,只有当dp[target] == target 的时候,才能说明其可划分为两个相等的子集。本题,相当于背包里放入数值,那么物品i的重量是nums[i],其价值也是nums[i]。dp[j] 表示: 容量为j的背包,所背的物品价值最大可以为dp[j]。

2023-05-06 15:54:09 673

原创 96. 不同的二叉搜索树

dp[i] += 以j为头结点的搜索树数量 = dp[以j为头结点左子树节点数量] * dp[以j为头结点右子树节点数量]dp[1]则是以1为头节点,左子树数量为0,右子树数量为0,dp[0]*dp[0] = 1;头节点为1时,左子树有0个节点,右子树有2个节点,2个节点的分布情况与n为2时的情况相同。头节点为2时,左子树有1个节点,右子树有1个节点,1个节点的分布情况与n为1时的情况相同。头节点为3时,左子树有2个节点,右子树有0个节点,2个节点的分布情况与n为2时的情况相同。著作权归领扣网络所有。

2023-05-04 12:10:51 705

原创 343. 整数拆分

给定一个正整数 n ,将其拆分为 k 个 正整数 的和( k >= 2 ),并使这些整数的乘积最大化。返回 你可以获得的最大乘积。示例 1:输入: n = 2输出: 1解释: 2 = 1 + 1, 1 × 1 = 1。示例 2:输入: n = 10输出: 36解释: 10 = 3 + 3 + 4, 3 × 3 × 4 = 36。提示:来源:力扣(LeetCode)链接:https://leetcode.cn/problems/integer-break。

2023-05-03 21:10:46 625

原创 63. 不同路径 II

机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。现在考虑网格中有障碍物。那么从左上角到右下角将会有多少条不同的路径?网格的左上角 (起始点在下图中标记为 “Start” )。1. 向右 -> 向右 -> 向下 -> 向下。2. 向下 -> 向下 -> 向右 -> 向右。3x3 网格的正中间有一个障碍物。网格中的障碍物和空位置分别用。

2023-05-03 20:27:37 392

原创 62. 不同路径

一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish” )。问总共有多少条不同的路径?示例 1:输入:m = 3, n = 7输出:28示例 2:输入:m = 3, n = 2输出:3解释:从左上角开始,总共有 3 条路径可以到达右下角。1. 向右 -> 向下 -> 向下2. 向下 -> 向下 -> 向右。

2023-05-03 18:19:31 850

原创 746. 使用最小花费爬楼梯

给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。请你计算并返回达到楼梯顶部的最低花费。示例 1:输入:cost = [10,15,20]输出:15解释:你将从下标为 1 的台阶开始。- 支付 15 ,向上爬两个台阶,到达楼梯顶部。总花费为 15。

2023-05-03 18:10:14 809

原创 70. 爬楼梯

假设你正在爬楼梯。需要 n 阶你才能到达楼顶。每次你可以爬 1 或 2 个台阶。你有多少种不同的方法可以爬到楼顶呢?示例 1:输入:n = 2输出:2解释:有两种方法可以爬到楼顶。1. 1 阶 + 1 阶2. 2 阶示例 2:输入:n = 3输出:3解释:有三种方法可以爬到楼顶。1. 1 阶 + 1 阶 + 1 阶2. 1 阶 + 2 阶3. 2 阶 + 1 阶提示:来源:力扣(LeetCode)

2023-05-03 17:55:38 712

原创 509. 斐波那契数

斐波那契数 (通常用 F(n) 表示)形成的序列称为 斐波那契数列。该数列由 0 和 1 开始,后面的每一项数字都是前面两项数字的和。也就是:F(n) = F(n - 1) + F(n - 2),其中 n > 1给定 n ,请计算 F(n)。示例 1:输入:n = 2输出:1解释:F(2) = F(1) + F(0) = 1 + 0 = 1示例 2:输入:n = 3输出:2解释:F(3) = F(2) + F(1) = 1 + 1 = 2示例 3:输入:n = 4。

2023-05-03 17:05:18 1135

原创 C++ STL-queue

队列类似于生活中的排队打饭,是一种先进先出(FIFO)的数据结构。它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。进行插入操作的端称为队尾,进行删除操作的端称为队头。队列中没有元素时,称为空队列。2.2、定义2.3、 方法函数

2023-05-02 16:35:18 332

原创 C++ STL-deque

deque容器是连续的空间,其他连续的行空间还有 array 和 vector,array无法动态变化,vector只能在尾端动态增加,其增加也更像是一个假象,实际的操作为:如果不是每次vector配置的新空间都留有富裕,其动态变化带来的代价将非常巨大。deque是由一段一段定量的连续空间构成的。一旦需要在deque头部或者尾部增加新的空间时,便配置一段连续定量的空间,串接在deque的头部或者尾部。deque最大的工作就是维护这些分段连续的空间的整体性的假象,并为其提供随机存取的接口,避开了重新配置空间、

2023-05-02 15:51:23 249

原创 C++ - 标准库(STL)

C++标准库是C++编程语言的标准程式库,它提供了一个通用的容器类、算法和函数模板库。其中包括了多种容器类型,例如:向量(vector)、双向链表(deque)、列表(list)、集合(set)和映射(map)等,各种容器类型均具备不同的优缺点和使用场景,STL还提供了许多算法和函数模板,使程序员能够轻松地完成一些常见的操作,例如排序、搜索、遍历和数据转换等。可以通过使用STL,从而提高代码的可读性和可维护性。

2023-05-02 14:16:05 1837 1

原创 CCF-202206-2-寻宝!大冒险!

暑假要到了。可惜由于种种原因,小 P 原本的出游计划取消。失望的小 P 只能留在西西艾弗岛上度过一个略显单调的假期……直到……某天,小 P 获得了一张神秘的藏宝图。

2023-05-01 16:21:51 1019 2

原创 C++ STL-map

map详解

2023-04-29 16:15:03 1787

原创 C++ STL-vector

vector详解

2023-04-29 14:51:48 1278 1

原创 CCF-202109-2-非零段划分

假设当前数字为3,那么如果他的左边和右边都同时大于它本身,那么这就是一个满足条件的非零段。如果只有一边满足大于当前数值的关系,那么说明减去这个数值之后,非零段的数值不会增加,如果两边的数值都想与当前块,那么减去当前块后,非零段就会减少一个,在开始时,初始化为存在一个非零块。首先遍历一遍数组,将数组中出现过的所有数储存到一个有序不允许重复的容器中,再将该数字出现过的所有下标储存在vector中,然后从小到大遍历这个容器内储存的所有下标附近的情况,判断满足条件的非零段。

2023-04-26 20:51:21 293

原创 CCF-202104-2-邻域均值

最长前缀和,维护一个最长前缀和的二维数组,每个位置储存其左上角的所有数值的和,当计算某个区域的数字和时,只需要通过该表进行一个加减法操作,将n2的时间复杂度优化到了n2.

2023-04-25 15:56:17 235

翻译 Graph-Based Information Block Detection inInfographic With Gestalt Organization Principles

信息图是一种通过信息块显示信息片段的可视化图表。现有的信息块检测工作利用空间接近度将元素分组为几个信息块。然而,先前的研究忽略了信息图的色度和结构特征,导致在检测信息块时出现错误的遗漏。为了缓解这种错误,我们使用场景图来表示信息图,并基于格式塔组织原理(空间邻近性、色相似性和结构相似性原理),提出了一种基于图的信息块检测模型来对元素进行分组。我们还构建了一个用于信息块检测的新数据集。定量和定性实验表明,与基于空间邻近度的方法相比,我们的模型可以更有效地检测信息图中的信息块。

2023-04-24 22:08:29 402

原创 CCF-202303-1-田地丈量

卡边界、算乘积、相加。

2023-04-24 15:59:27 336

原创 CCF-202212-1-现值计算

开始理解错了以为要算若干年后的总收益,得出的结果总是大一点,重新看了一遍题目发现是算出当前的总收益,那么也就是需要将若干年后的收益转换为当前的价值,理清思路之后代码非常好实现。

2023-04-24 15:55:10 264

原创 CCF-202209-1-如此编码

题目说了一大堆,其实看题目提示一步步的写就好了,只需要处理掉多余的计算即可,同时不要为一些没必要的数据开辟数组空间,例如只在输入时用到的a数组,没必要开辟空间,以及注意循环的边界值,给c[0]初始化。

2023-04-24 15:30:52 271

原创 CCF-202206-1-归一化处理

按照题目给的要求一步步来就行,需要注意的是中间临时储存数据的时候要用double,不要用成int,还有就是sqrt是开方的函数,不要忘了。

2023-04-24 15:02:42 253

原创 CCF-202203-1-未初始化警告

看清题目写了,a0为常数,a1-1n为变量,那么我们只需要找到一个不许添加重复数值的容器,先查询右值是否在容器中出现过,如果没有则说明未初始化该变量,sum++。再将每次遍历的左值插入容器,表示其已经过初始化,依次循环直至程序结束。

2023-04-24 14:35:45 329

原创 力扣-202112-1-序列查询

依次遍历输入的A数组,由于只用到A数组当前值,故无需维护A数组,直接通过其值大小来构建f数组,构建好f数组之后算sum值,由于存在多个相同的数字连续储存,可以通过计算乘法减少计算次数。

2023-04-24 14:11:30 229

原创 CCF-202109-1-数组推导

max值一定是B数组每个值相加,而min,只需要将B中第一次出现的数加一次,其余值加0即可,第一次写的时候以为要加出现过的最小的b值,导致数据有40%出错,同时,由于只用到了当前数字和钱一个数字,不需要维护一个数组,可以节省更多的资源。

2023-04-24 12:58:41 256

原创 153. 寻找旋转排序数组中的最小值

已知一个长度为 n 的数组,预先按照升序排列,经由 1 到 n 次 旋转 后,得到输入数组。例如,原数组 nums = [0,1,2,4,5,6,7] 在变化后可能得到:若旋转 4 次,则可以得到 [4,5,6,7,0,1,2]若旋转 7 次,则可以得到 [0,1,2,4,5,6,7]注意,数组 [a[0], a[1], a[2], ..., a[n-1]] 旋转一次 的结果为数组 [a[n-1], a[0], a[1], a[2], ..., a[n-2]]。

2023-04-20 21:08:15 525

原创 278. 第一个错误的版本

你是产品经理,目前正在带领一个团队开发新的产品。不幸的是,你的产品的最新版本没有通过质量检测。由于每个版本都是基于之前的版本开发的,所以错误的版本之后的所有版本都是错的。假设你有 n 个版本 [1, 2, ..., n],你想找出导致之后所有版本出错的第一个错误的版本。你可以通过调用 bool isBadVersion(version) 接口来判断版本号 version 是否在单元测试中出错。实现一个函数来查找第一个错误的版本。你应该尽量减少对调用 API 的次数。

2023-04-20 20:29:42 736

原创 540. 有序数组中的单一元素

给你一个仅由整数组成的有序数组,其中每个元素都会出现两次,唯有一个数只会出现一次。请你找出并返回只出现一次的那个数。你设计的解决方案必须满足 O(log n) 时间复杂度和 O(1) 空间复杂度。示例 1:输入: nums = [1,1,2,3,3,4,4,8,8]输出: 2示例 2:输入: nums = [3,3,7,7,10,11,11]输出: 10提示:来源:力扣(LeetCode)

2023-04-20 20:14:48 490

原创 744. 寻找比目标字母大的最小字母

需要注意的就是循环结束的判断,因为字母是可能有重复的,而且我们要找的是大于当前字符的最小字符,如果当前字母小于等于目标字符,说明刚好大于目标字符的最小字符一定在 [mid+1~h] 中,所以要修改l为mid+1。letters 里至少有两个不同的字符。输入: letters = ["x","x","y","y"], target = "z"输入: letters = ["c", "f", "j"],target = "a"输入: letters = ["c","f","j"], target = "c"

2023-04-20 15:24:37 590

原创 69. x 的平方根

给你一个非负整数 x ,计算并返回 x 的 算术平方根。由于返回类型是整数,结果只保留 整数部分 ,小数部分将被 舍去。注意:不允许使用任何内置指数函数和算符,例如 pow(x, 0.5) 或者 x ** 0.5。示例 1:输入:x = 4输出:2示例 2:输入:x = 8输出:2解释:8 的算术平方根是 2.82842..., 由于返回类型是整数,小数部分将被舍去。提示:来源:力扣(LeetCode)

2023-04-19 21:35:23 502

原创 763. 划分字母区间

给你一个字符串 s。我们要把这个字符串划分为尽可能多的片段,同一字母最多出现在一个片段中。注意,划分结果需要满足:将所有划分结果按顺序连接,得到的字符串仍然是 s。返回一个表示每个字符串片段的长度的列表。示例 1:输入:s = "ababcbacadefegdehijhklij"输出:[9,7,8]解释:划分结果为 "ababcbaca"、"defegde"、"hijhklij"。每个字母最多出现在一个片段中。

2023-04-19 20:47:41 499

原创 142. 环形链表 II

给定一个链表的头节点 head ,返回链表开始入环的第一个节点。如果链表无环,则返回 null。如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅是为了标识链表的实际情况。不允许修改 链表。示例 1:输入:head = [3,2,0,-4], pos = 1。

2023-04-19 20:21:35 564

原创 53. 最大子数组和

给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。子数组 是数组中的一个连续部分。示例 1:输入:nums = [-2,1,-3,4,-1,2,1,-5,4]输出:6解释:连续子数组 [4,-1,2,1] 的和最大,为 6。示例 2:输入:nums = [1]输出:1示例 3:输入:nums = [5,4,-1,7,8]输出:23提示:来源:力扣(LeetCode)

2023-04-18 22:14:11 543

原创 665. 非递减数列

给你一个长度为 n 的整数数组 nums ,请你判断在 最多 改变 1 个元素的情况下,该数组能否变成一个非递减数列。我们是这样定义一个非递减数列的: 对于数组中任意的 i (0

2023-04-18 20:03:04 847

原创 392. 判断子序列

给定字符串 s 和 t ,判断 s 是否为 t 的子序列。字符串的一个子序列是原始字符串删除一些(也可以不删除)字符而不改变剩余字符相对位置形成的新字符串。(例如,"ace"是"abcde"的一个子序列,而"aec"不是)。进阶:如果有大量输入的 S,称作 S1, S2, ... , Sk 其中 k >= 10亿,你需要依次检查它们是否为 T 的子序列。在这种情况下,你会怎样改变代码?

2023-04-15 18:15:48 480

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除