算法
文章平均质量分 83
凤 曦
这个作者很懒,什么都没留下…
展开
-
DFS深度优先搜索刷题(二)
算法思想:dfs按列扫描,在每一列具体扫描中向下扫描行,设置行的状态,当某一行已经放过棋子,跳过此行,继续扫描下一行,直到找到没有放过棋子的一行,就将此行状态设置为真。算法思想:设置瓷砖状态st,这里瓷砖状态是否走过决定计数与否,因为可以重复走过但只记一次,所以可以不用回溯。每一次dfs都记录此时的坐标与进入可能的新坐标。算法思想:组合型枚举,带一个start变量保证以后的不小于start即可,在带一个即时记录所用数字和变量判断剪枝。类似上题,记录水格状态即可。ps:注意一列不放棋子的情况。原创 2024-03-26 23:32:46 · 295 阅读 · 0 评论 -
DFS深度优先搜索刷题(一)
第x位选择状态为未选择的数并给该数设置已选择状态,然后枚举x+1位直至枚举完,判断是否符合,并根据具体情况进行剪枝。,一共三个位置,先构造一个火柴用量数字表,根据表依次枚举每个位置的火柴表示数,最后符合。,在通过剪枝去除错误的方案来减少时间开销。两个条件后记录数+1,注意当火柴用量超出时剪枝。用dfs暴力枚举出所有组合情况,主要是通过。依旧dfs暴力枚举出每种排序,主要。x位以后可选的数是否最终能达到要求。,实现组合不重复的实现。,可以通过dfs深度优先搜索。,注意回溯时当前位置的置空。原创 2024-03-23 22:56:05 · 263 阅读 · 0 评论 -
滑动窗口(二)
算法思想:可以用哈希表记录是否已经采摘过扫描指针指向的水果(入窗口),如果没有,则令type++,然后判断当type>2时,则将left++(出窗口),令哈希表中left指向的水果种类-1直到为0时,type--,保证type原创 2024-03-23 20:15:13 · 359 阅读 · 0 评论 -
双指针(滑动窗口)-算法刷题
cur为扫描指针,dest为移动指针,初始cur为0,dest为-1;当dest移动到最后一个元素时,cur指向最后一个要复写的元素。但这里dest可能会超出(说明cur此时指向0),所以要先判断边界位置。原创 2024-03-22 19:17:25 · 1136 阅读 · 1 评论 -
二分查找算法--刷题
二分查找也常被称为二分法或者折半查找,每次查找时通过将待查找区间分成两部分并只取一部分继续查找,将查找的复杂度大大减少。对于一个长度为 O(n) 的数组,二分查找的时间复杂度为 O(log n)。实质是验证位置是否符合要求,将数组分为符合要求的区间与不符的区间,找到临界位置。但值得注意的是:二分查找主要针对的是有序数组。原创 2024-03-02 09:46:58 · 640 阅读 · 0 评论 -
各类排序小记
元素集合越接近有序,直接插入排序算法的时间效率越高时间复杂度:O(N^2)空间复杂度:O(1),它是一种稳定的排序算法稳定性:稳定希尔排序:希尔排序分为预排序和直接插入排序预排序是又称接近有序排序的排序,它是将数组内的元素进行分组,每一组内进行直接插入排序。当每一组都完成排序后,在对整个数组进行直接插入排序。代码实现:希尔排序其实就是直接插入排序的升级版本,本质上是将数组中的元素分为多组进行直接排序后,在将整个数组进行直接排序。原创 2023-12-10 11:52:40 · 845 阅读 · 1 评论 -
用数组实现大小堆
堆的定义:因为堆的底层是数组所以定义一个数组的结构体,且看似一个顺序表,但本质上并不是顺序表,因为逻辑结构是一个完全二叉树,所以插入的要求要完全按照完全二叉树的要求来看,这里就需要用到之前完全二叉树存储到数组中后,父节点和子节点再数组中的下标关系。注意:size是表示结点的个数,而不是数组的下标,结点的个数始终是比数组的下标大1 ,所以之后的插入操作中 size 是表示需要插入的位置下标。堆的插入: 堆的插入和删除本质上是需要对堆的状态进行一种保持,例如,再插入前是小堆类型,那么插入后就原创 2023-11-25 22:34:05 · 889 阅读 · 0 评论