自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 算法——BFS(广度优先搜索)

1.首先了解DFS(深度优先搜索)和BFS(广度有限搜索的区别)(1)bfs:即队列的数据结构,先进先出,每次遍历的过程是一层一层的顺序遍历,一般用来找最短路径(2)dfs:即栈的数据结构,先进后出,每次遍历都是先找到一遍的叶子节点,然后递归返回继续查找下一个叶子节点,不能找到最短的路径(3)bfs的拓展规则如上图所示,每次都找到当前对头节点的所有拓展节点,依次加入队尾,然后弹出对头元素(4)在bfs算法中常用的操作方式如下:(5)队列的使用技巧;

2024-03-22 12:49:17 1227

原创 算法——图论

例题:交换瓶子有 N个瓶子,编号 1∼N,放在架子上。2 1 3 5 4要求每次拿起 2 个瓶子,交换它们的位置。1 2 3 4 5对于这么简单的情况,显然,至少需要交换 2 次就可以复位。如果瓶子更多呢?你可以通过编程来解决。

2024-03-22 12:38:33 228

原创 算法——双指针

1.定义:双指针算法是一个用来优化操作的思想,可以降低代码的时间复杂度例题:日志统计小明维护着一个程序员论坛。ts id表示在 ts 时刻编号 id的帖子收到一个”赞”。现在小明想统计有哪些帖子曾经是”热帖”。如果一个帖子曾在任意一个长度为 D 的时间段内收到不少于 K 个赞,小明就认为这个帖子曾是”热帖”。具体来说,如果存在某个时刻 T满足该帖在 [T,T+D) 这段时间内(注意是左闭右开区间)收到不少于 K个赞,该帖就曾是”热帖”。给定日志,请你帮助小明统计出所有曾是”热帖”的帖子编号。

2024-03-20 20:44:25 432

原创 算法——树状数组,线段树

一.树状数组定义:核心是用来解决两个问题(1)单点修改(2)区间查询2.计算前缀和的写法3.当给原数组A[ ] 的某个位置加上一个数字V,则数组数组的改变如下可以使用add函数进行树状数组的初始化,默认当前树状数组的值都为0,然后在每一个位置i上加上a[i]即可例题:动态求连续区间和给定 n个数组成的一个数列,规定有两种操作,一是修改某个元素,二是求子数列 [a,b]的连续和。

2024-03-20 19:16:30 311

原创 算法——枚举,模拟,排序(2)

在排序中,快速排序很少手写,可以直接使用c++的sort函数由此常用归并排序归并排序算法思路:1.确定分界点mid = (l+r)/2 可以写成l + r >> 12.递归排序left,right (将一个完成的数组一直对半分割,直到每个数组中只有两个元素,排序后递归回溯)3.将两个有序的序列合二为一,进行归并(最难)

2024-03-04 20:51:26 395 1

原创 算法——枚举,模拟,排序

1.连号区间数小明这些天一直在思考这样一个奇怪而有趣的问题:在 1∼N的某个排列中有多少个连号区间呢?这里所说的连号区间的定义是:如果区间 [L,R]里的所有元素(即此排列的第 L个到第 R 个元素)递增排序后能得到一个长度为 R−L+1 的“连续”数列,则称这个区间连号区间。当 N很小的时候,小明可以很快地算出答案,但是当 N 变大的时候,问题就不是那么简单了,现在小明需要你的帮助。

2024-03-04 20:42:33 369 1

原创 算法——数学与简单DP(2)

DP:从集合的角度分析DP问题(一般用来求最值/个数问题)ps:DP问题的数量级很大,用暴力会超时1.步骤一:化零为整(把零散的化为集合)2.步骤二:化整为零(把集合划分)以01背包问题为例:(组合模型,所有选择问题都可以用01背包的思想)有 N件物品和一个容量是 V的背包。每件物品只能使用一次。第 i件物品的体积是 vi,价值是 wi。求解将哪些物品装入背包,可使这些物品的总体积不超过背包容量,且总价值最大。输出最大价值。

2024-03-03 23:54:10 1369

原创 算法——数学与简单DP(1)

1.买不到的数目小明开了一家糖果店。他别出心裁:把水果糖包成4颗一包和7颗一包的两种。糖果不能拆包卖。小朋友来买糖的时候,他就用这两种包装来组合。当然有些糖果数目是无法组合出来的,比如要买 10 颗糖。你可以用计算机测试一下,在这种包装情况下,最大不能买到的数量是17。大于17的任何数字都可以用4和7组合出来。本题的要求就是在已知两个包装的数量时,求最大不能组合出的数字。

2024-02-25 23:10:08 354

原创 前缀和习题

该题目的意思:如图所示的炸弹范围,只能摧毁中间的四个区域,边上的是无法摧毁的例题2:K倍区间给定一个长度为 N的数列,A1,A2,…AN,如果其中一段连续的子序列 Ai,Ai+1,…Aj之和是 K 的倍数,我们就称这个区间 [i,j] 是 K倍区间。你能求出数列中总共有多少个 K倍区间吗?

2024-02-25 20:51:24 344

原创 二分搜索习题

例题:机器人跳跃问题机器人正在玩一个古老的基于 DOS 的游戏。游戏中有 N+1 座建筑——从 00 到 N编号,从左到右排列。编号为 0的建筑高度为 0 个单位,编号为 i 的建筑高度为 H(i) 个单位。起初,机器人在编号为 0 的建筑处。每一步,它跳到下一个(右边)建筑。假设机器人在第 k个建筑,且它现在的能量值是 E,下一步它将跳到第 k+1 个建筑。如果 H(k+1)>E,那么机器人就失去 H(k+1)−E的能量值,否则它将得到 E−H(k+1) 的能量值。

2024-02-19 18:46:03 515 1

原创 Blue bridge Cup Day4-递归与递推习题

1.飞行员兄弟“飞行员兄弟”这个游戏,需要玩家顺利的打开一个拥有 16 个把手的冰箱。已知每个把手可以处于以下两种状态之一:打开或关闭。只有当所有把手都打开时,冰箱才会打开。把手可以表示为一个 4×4 的矩阵,您可以改变任何一个位置 [i,j]上把手的状态。但是,这也会使得第 i 行和第 j 列上的所有把手的状态也随着改变。请你求出打开冰箱所需的切换把手的次数最小值是多少。

2024-02-16 18:19:58 354 1

原创 Blue bridge Cup Day3

一、递推首先了解递推和递归的区别(递归):树结构,将一个问题分解成若干个相同的子问题(递推):是通过子问题的解来得到原问题的解,按顺序依次求得解,一个一个枚举例题:费解的开关你玩过“拉灯”游戏吗?25 盏灯排成一个 5x5 的方形。每一个灯都有一个开关,游戏者可以改变它的状态。每一步,游戏者可以改变某一个灯的状态。游戏者改变一个灯的状态会产生连锁反应:和这个灯上下左右相邻的灯也要相应地改变其状态。我们用数字 1 表示一盏开着的灯,用数字 00表示关着的灯。下面这种状态。

2024-02-13 13:31:13 1580 1

原创 Blue bridge Cup Day2

递归练习1.递归实现指数型枚举从 1∼n 这 n个整数中随机选取任意多个,输出所有可能的选择方案。

2024-02-06 23:18:08 391 1

原创 Blue bridge Cup Day1

(1)递归:即自己调用自己,且任何递归都可以画出一棵递归搜索树。好处:根据n的数据范围,可以快速的确定出该题目的可能解法。

2024-01-25 23:17:25 352 1

原创 算法学习Day10 位运算

位运算算法1使用lowbit操作,进行,每次lowbit操作截取一个数字最后一个1后面的所有位,每次减去lowbit得到的数字,直到数字减到0,就得到了最终1的个数,lowbit原理根据计算机负数表示的特点,如一个数字原码是10001000,他的负数表示形势是补码,就是反码+1,反码是01110111,加一则是01111000,二者按位与得到了1000,就是我们想要的lowbit操作算法2(暴力枚举) O(nlongn)思路。

2023-09-07 11:24:30 40

原创 算法学习Day9 离散化

离散化离散化的本质是建立了一段数列到自然数之间的映射关系(value -> index),通过建立新索引,来缩小目标区间,使得可以进行一系列连续数组可以进行的操作比如二分,前缀和等…离散化首先需要排序去重:1. 排序:sort(alls.begin(),alls.end())2. 去重:alls.earse(unique(alls.begin(),alls.end()),alls.end());unique()函数的底层原理int j = 0;++i) {if (!

2023-09-06 21:39:46 37 1

原创 算法学习Day8 双指针算法

双指针算法具体情况分为两种,两个指针维护一段区间或者两端区间例题:给定一个长度为 n的整数序列,请找出最长的不包含重复的数的连续区间,输出它的长度。

2023-09-05 22:46:28 35

原创 算法学习Day7 二维差分

对于差分,不用考虑如何构造,只需考虑如何更新思路:类比一维差分和二维前缀和例题:输入一个 n行 m 列的整数矩阵,再输入 q个操作,每个操作包含五个整数 x1,y1,x2,y2,c,其中 (x1,y1)和 (x2,y2)表示一个子矩阵的左上角坐标和右下角坐标。每个操作都要将选中的子矩阵中的每个元素的值加上 c。请你将进行完所有操作后的矩阵输出。

2023-09-04 22:49:05 34 1

原创 算法学习Day6 差分

差分:1.构造数组a[ ] , a1, a2 , a3 , a4.....ai;2.构造数组b[ ] , b1, b2 , b3 , b4.....bi;3.使得数组ai为数组bi的前缀和:ai = b1 + b2 + b3 +.....+ bi;

2023-09-03 21:35:21 25

原创 算法学习Day5 二维前缀和

二维前缀和思路:求一个二维矩阵的部分矩阵和,已知一点Ai,j , 则Si,j 表示Ai,j 左上角全部元素的和因此:所求蓝色小矩阵的面积等于:大矩阵的面积 - S绿 -S红 + 左上角被减2次的小矩阵面积分为两个步骤:先求前缀和,然后求子矩阵的和误区:二维的图形,不要当成坐标,每个点都为一个个不连续的小方块,因此在计算时要-1例题:输入一个 n行 m列的整数矩阵,再输入 q个询问,每个询问包含四个整数 x1,y1,x2,y2,表示一个子矩阵的左上角坐标和右下角坐标。

2023-09-02 10:01:31 39 1

原创 算法学习Day4 前缀和

前缀和1.定义一个数组: a1,a2,a3....an2.前缀和:Si = a1+a2+....+ai;S0 = 0(1) 如何求Si : S[ i ] = S[ i-1 ] + ai(2)作用:减少计算的时间复杂度 [l , r] O(n)例题:输入一个长度为 n的整数序列。接下来再输入 m个询问,每个询问输入一对 l,r。对于每个询问,输出原序列中从第 l个数到第 r个数的和。

2023-09-01 21:27:24 39 1

原创 算法学习Day3 二分排序

一.整数二分:将一段区间分成两个部分,求两个部分(红色区域和蓝色区域)的分界点;注意区分哪个区域,通过判断l和r的取值,决定mid是否有加1!!!​​​​​​​例题:给定一个按照升序排列的长度为 n 的整数数组,以及 q�个查询。对于每个查询,返回一个元素 k 的起始位置和终止位置(位置从 00 开始计数)。如果数组中不存在该元素,则返回-1 -1。

2023-08-31 22:13:45 203

原创 算法学习Day2 归并排序

算法思路:1.确定分界点mid = (l+r)/2 可以写成l + r >> 12.递归排序left,right (将一个完成的数组一直对半分割,直到每个数组中只有两个元素,排序后递归回溯)3.将两个有序的序列合二为一,进行归并(最难)双指针算法:两个序列的指针开始都指向序列的最小值,依次比较两个序列的最小值,把最小的放进数组中,直到一个指针走完,另一个序列的剩余元素直接补到数组中(当两个数相同时,一般把第一个数的值放入)4.时间复杂度:nlogn例题:给定你一个长度为 n的整数数列。

2023-08-30 19:35:04 43 1

原创 算法学习Day1 快速排序

快速排序: 分治的思想(1)确定分界点,q[l];q[(l+r)/2];q[l],随机数;(2)调整区间(最难的部分):取一个x把区间分为两个部分,小于等于x的在x左边,大于等于x的在x右边;暴力做法:取a[],b[] 遍历q[l~r] 若q[i]a[];最后把a[]->q[]里,b[]->q[]里。

2023-08-29 16:54:17 40 2

空空如也

空空如也

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

TA关注的人

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