自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 可被三整除的最大和(动态规划详解)

但是第二种情况并不一定会存在,因为选第i个数来找前面的那个状态的时候是有可能不存在的,dp[i-1][(j-nums[i-1]%3+3)%3]表示从前i-1个数(下标从1开始)中选若干个数的和,其和mod3为(j-nums[i-1]%3+3)%3时的最大和,如果从前i-1个数选若干个数的和mod3的和有可能得不到(j-nums[i-1]%3+3)%3。即dp[i][j] = max(dp[i-1][j],dp[i-1][(j-nums[i-1]%3+3)%3]+nums[i-1]);

2024-07-22 19:48:40 395

原创 让字符串成为回文串的最少插入次数(动态规划详解)

既然首和尾不相等,那就有两种情况,一种是固定j,在j的后面加一个s[i],使首可以构成回文,然后去[i+1][j]这个区间找;③当i+1<j 时,此时表示i和j中间有字符串,但开始和结尾已经形成回文了,就需要去中间找,也就是dp[i][j] = dp[i+1][j-1];先看s[i]==s[j]时,用到的数据是相邻左下角的,发生越界的只有[0][0],[n-1][n-1],但是并不会,因为已经进行特判过了。所以dp[i][j] = min(1+dp[i+1][j],1+dp[i][j-1]);

2024-07-02 12:32:24 462

原创 Flood Fill问题详情(BFS)

Flood Fill翻译过来就是洪水覆盖,意思就是从一个点开始找它的连通集。比如说有这么一个矩阵只包含数字0和1,如果说从左上角的数字开始找,那么应该找到的是这个样子的。也就是说找到上下左右(一般是指上下左右四个方向,也有可能包含对角)与开始相同的一个区域.1 1 0 0 01 100 01 10 010 0。

2024-05-29 18:04:02 955 1

原创 [滑动窗口]找出最长等值子数组

此时不外乎两种情况:nums[left]==nums[right],这种情况在出窗口的时候就已经判断过了,是符合条件的。先看什么时候需要出窗口,我们以left为基准,每次检查在这个窗口中的除了以left为下标对应的元素的个数(也就是找以left为基准的等值数组),与k的值进行比较,如果小于等于k的话就说明是足以将除nums[left]的值删去,当大于k的话就说明不够删了,这时候就需要出窗口了,注意这里是一次一次走的,所以出窗口的时候仅需让left向右移动一次仅可,同时将left对应元素的个数减一。

2024-05-24 17:45:51 860 1

原创 从魔法师身上吸取的最大能量

在神秘的地牢中,n个魔法师站成一排。每个魔法师都拥有一个属性,这个属性可以给你提供能量。有些魔法师可能会给你负能量,即从你身上吸取能量。你被施加了一种诅咒,当你从魔法师i处吸收能量后,你将被立即传送到魔法师(i + k)处。这一过程将重复进行,直到你到达一个不存在(i + k)的魔法师为止。换句话说,你将选择一个起点,然后以k为间隔跳跃,直到到达魔法师序列的末端,在过程中吸收所有的能量。给定一个数组energy和一个整数k,返回你能获得的最大能量。

2024-05-12 15:29:08 761 1

原创 C语言地下迷宫

接着是最短路径的优化,要找到最短路径,那我们就需要找到所有的路径,然后依次比较就可以了,既然要走所有的路径,我们就不需要返回值了,是通路就走,才可以走完所有的路,此时我们需要新创一个栈来存最短路径,记为minpath,每次走完就需要跟path对比一下,如果是第一次,minpath为空时,直接将path拷贝过去,如果不是,比较之后,path如果小了,就可以拷。(被第三次的下调用)第四次(上x,下x,左x,右x):走不通,传回到第三次的下。(被第十一次的右调用)第十二次(上x,下x,左x,右x),通路,回去。

2024-03-27 17:14:27 1110

原创 C语言迷宫问题

这就是迷宫的雏形,接下来是输出,题目要求输出通路的坐标,根据栈的后进先出的性质,我们可以将所走的每个坐标存到栈里,如果是死路就出栈,接着是打印的问题,栈是后进先出,所以我们可以再创建个栈,把存的坐标放到新的栈里,这样栈的顺序反过来了,就可以打印了。首先来看如何走所有可能的路,如果是通路就走,遇到墙或边界不走,遇到死路回去,但是回去,会回到哪里,如果没有做标记,一回不就彻底回去了,然后可能会原地转圈,这时候我们需要把走过的路做个标记,走过就不再走了,为了简单,这里将走过的路用2来标记。

2024-03-26 09:39:23 1308

原创 C语言小苯的区间和疑惑

对于这一道题的核心思想就是对于第i项的a(为了迎合题目方便理解,让i从1开始),我们只需要找到前i-1项最大连续子列的和(含i-1),以及后i+1项连续子列的最大和(含i+1项),这样只要用第i项的值加前i-1项最大的和加后i+1项最大的和就是要找的结果了。他想知道,对于所有1<i<n 的下标i,都从数组中选择一段连续的区间[l,r], 使得l<i<r,即选择一个包含i的区间的话,这段区间和最大是几?i=1 ,选择 [1,3],结果是: 1+(−2)+3=2是最优解。i=2,选择 [1,3]

2024-03-21 20:06:47 591

原创 C语言k倍区间

求和:1,3,6,10,15.取模:1,1,0,0,1;取模得到1的数共有三个,也就是从这三个中选出来两个作差就可以被整除,也就是C(3,2),取模得到0的数共有2个(正好被整除,特殊),作差可以作出一个,然后再加上两个正好被整除的,也就是1+2,但是这两种情况并不能归为一类,需要分类,那么就再优化一下1,让他归到一类,C(m,2)所代表的不就是从1+2+...+m-1,那么让0多一个,不就依然可以看成从中选两个了。Aj(i

2024-03-20 10:55:09 420 1

原创 C语言wyh的物品

这样来看就可以用二分来解决这个问题了,首先用数组x记入所有的差值,然后再对数组进行排序,这里的排序是降序,因为我们要找最大的单位价值,当X>0时,是需要找大的,所以需要降序;题目中说单位价值为选取的 k个物品的总价值和总重量的比值,假设已经选定了k个物品,那么在这k个物品作用下,一个物品的价值x = 这个物品的价值 - 单位价值 * 重量,此时将所有的x累加起来就会有三种情况。用零来分割,记求和之后的价值为X,如果X>0时,说明了单位价值取小了,需要找大;如果X<0时,说明单位价值取大了,需要找小;

2024-03-18 20:59:55 406

原创 c语言校门外的数

数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。首先考虑的是如何把每一段区间的数映射到我们新创的数组,这时我们就可以用for循环嵌套,外层for找区域,内层for找对应区域的区间并映射过去,映射过去就需要让小区间减一,既然减一了,那就要考虑小区间是否为零,如果是零的,减一就越界了,这时我们将其置为一就可以了。想一下,如果有一个小区间从0开始,把其置为1了,那不就相当于少映射了一次,所以当小区间是零的话,我们就需要再加加一次,但是不能每次是零就加,第一次出现加,以后出现就不用加了,避免重复。

2024-03-17 16:34:15 560 1

空空如也

空空如也

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

TA关注的人

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