算法
文章平均质量分 95
基础算法
不是我衰
这个作者很懒,什么都没留下…
展开
-
算法之分治
分治法所能解决的问题一般具有以下几个特征:1) 该问题的规模缩小到一定的程度就可以容易地解决2) 该问题可以为若干个,即该问题具有最优子结构性质3) 利用该问题分解出的可以该4) 该问题所分解出的各个子问题是的, 即子问题之间第一条特征是绝大多数问题都可以满足的, 因为问题的计算复杂性一般是随着问题规模的增加而增加.第二条特征是应用分治法的前提它也是大多数问题可以满足的, 此特征反映了递归思想的应用.原创 2024-06-11 09:38:22 · 711 阅读 · 0 评论 -
算法之模拟
从前往后遍历crokaOFFrogs字符串, 如果遇到 'c' 说明有一个青蛙开始叫, 如果遇到 'r' 只需去查找前面的字符串中是否有 'c', 所以可以用哈希表来存储字符出现的次数, 也就是青蛙的个数, 遍历到 'r' 的时候, c字符出现个数>=1, 说明有青蛙可以叫出来'r', hash['c']--, hash['r']++, 代表有一个青蛙叫到 'r', 其它字符也是同理. 叫到'k'说明青蛙叫完了.2. 如果字符串遍历结束k之前的字符有>=1的情况, 说明有青蛙没叫完, 返回-1。原创 2024-04-04 10:11:28 · 656 阅读 · 0 评论 -
算法之位运算
得到的结果就是最终加法的结果:原创 2024-03-19 20:33:25 · 706 阅读 · 0 评论 -
算法之前缀和
可以把矩阵 i*j 沿 i 和 j 分为四块, 分别标记为A,B,C,D, 因为这样划分A+B 和 A+C 的面积可以分别用dp[i-1][j]和dp[i][j-1]表示, 而D的面积就是arr[i][j], 所以dp[i][j] = A+B + A+C + D - A = dp[i-1][j] + dp[i][j-1] + dp[i-1][j] + arr[i][j] - dp[i-1][j-1], 而区间[l,r]的和就是dp[r] - dp[l-1], 直接取出数据即可。原创 2024-03-17 09:47:00 · 863 阅读 · 0 评论 -
算法之二分查找算法
1. 首先说明二分查找算法是比较恶心, 细节很多, 很容易写出死循环的算法, 但熟悉了之后是最简单的算法.2. 其次我们可能听说过二分查找的前提是数组有序的前提下进行, 但其实不一定.二分查找算法的关键是"" , 当我们发现一个规律, 根据这个规律能把这个数组分为两部分, 根据规律能有选择性的舍去一部分, 进而能在另一个部分继续查找, 可以看到这其中并没有提到数组是否有序, 关键在于数组是否有此外, 我们对于选择区间划分点mid的位置也并。原创 2024-03-12 20:05:26 · 1019 阅读 · 0 评论 -
算法之滑动窗口
▪ 我们既然已经找到从 left1 开始的最优的区间, 那么就可以⼤胆舍去left1,但是如果继续像⽅法⼀⼀样,重新开始统计第⼆个元素(left2)往后的和, 势必会有⼤量重复的计算(因为我们在求第⼀段区间的时候, 已经算出很多元素的和了, 这些和是可以在计算下次区间和的时候⽤上的).right不需要再回退到left重新来算一遍sum了, 抛开right对应的值, 此时窗口内的和肯定比上一个窗口小, 所以当前窗口以left为起点的子窗口的sum肯定更小, 所以right在上次的位置待着即可.原创 2024-03-11 15:22:41 · 1042 阅读 · 0 评论 -
算法之双指针
dest++ 之后,指向的元素是0元素或者也可能是cur, 因为当dest == cur时,0区间不存在, 因此可以交换dest和cur位置上的数据(如果此时dest==cur,相当于自我交换,可以加if判断省略掉),实现 [0, dest] 的元素全部都是⾮零元素, [dest + 1, cur - 1] 的元素全是零。情况⼆:在历史的数据中死循环,但始终变不到1, 由于上述两种情况只会出现⼀种, 因此, 只要我们能确定循环是在「情况⼀」中进⾏,还是在「情况⼆」中进⾏, 就能得到结果。原创 2023-11-16 23:26:06 · 275 阅读 · 0 评论