算法
qweeera
zhankongjian.cn
展开
-
关于二分查找的总结和思考
模板二分法查找,只有当目标在数组内才能找到准确索引索引下标。当不存在于数组内时,我们依然可以借助二断性找到边界并进行处理。但是需要对于3和4这种超出边界的情况需要特殊处理。原创 2022-07-24 23:16:53 · 579 阅读 · 0 评论 -
关于vector中所有元素清零的解决办法
vector 所有元素清零原创 2022-07-24 22:37:39 · 5623 阅读 · 3 评论 -
线段树的四种模板
第一种模板只适合单点修改的题目,每次修改都传递到树的子节点。对于区间修改则不合适,同时,由于数组大小事先申明好,其点数也有上限。为了解决数据量的问题,这里提供了动态开点,解除了每个树的元素都占一个固定坑位的限制。但是仍然有限制,点数不可以随便加,有上限。和第一套模板相比,增加了区间修改的功能。但是点数仍然有上限,数据量顶多十万,再往上就不能适用了。点数无限制,需要的时候申请,但是效率会很低。...原创 2022-07-20 07:05:32 · 3699 阅读 · 4 评论 -
大顶堆/小顶堆用法
大顶堆/小顶堆用法。原创 2022-07-19 07:30:35 · 160 阅读 · 0 评论 -
一种削峰算法
加入有九座山,高度分别是[9,8,7,6,5,4,3,2,1];削掉峰值的总和是k,怎样可以尽可能的削减高峰。有没有一种办法,可以直接算出削峰之后的平均线,然后所有高出这个平均线的都一把削掉,而不是一米一米的削掉呢?按照常规逻辑,每次将最高的减少一米,然后山峰重新排序,接着再将最高的削减一米,直到k次使用完。按照这种思路,可以使用大顶堆来解决,每次将最大值取出来减一之后再塞回去。但是这种操作在大用例集下会超时,因为是一个一个操作。削峰算法,故名思义,就是将峰值高的地方铲掉。...原创 2022-07-15 05:46:02 · 1323 阅读 · 0 评论 -
【两两乘积的一种O(n)解法】
假定一个数组,我们需要计算他的所有数两两乘积的和。比如:大小为4的数组a有元素那么两两乘积为:常规思路是用两个for循环。这种解法的时间复杂度是O(n2),因此在一些数据集比较大的地方容易超时。一种O(n)的解法如下:可以将 转化成如下等式...原创 2022-06-28 07:32:31 · 224 阅读 · 0 评论 -
algs4_Evaluation
import java.util.Stack;//import edu.princeton.cs.algs4.In;import edu.princeton.cs.algs4.StdOut;import edu.princeton.cs.algs4.StdIn;public class Evaluation{ public static void main(String[]原创 2018-01-11 16:46:58 · 193 阅读 · 0 评论 -
algs4_BinarySearch
import java.util.Arrays;import edu.princeton.cs.algs4.In;import edu.princeton.cs.algs4.StdOut;import edu.princeton.cs.algs4.StdIn;public class BinarySearch{ public static int rank(int key, i原创 2018-01-11 16:45:14 · 270 阅读 · 0 评论 -
汉诺塔递归算法
相信很多人都玩过汉诺塔游戏,今天来讨论下这个游戏的最优解的程序实现。原创 2017-12-04 17:29:28 · 577 阅读 · 0 评论 -
一个简单的shell
#include #include #define MAX 256char comman[MAX][MAX] = {0};int main(){int c,i = 0,j = 0, z = 0,k=0;int argc = 0;char pre_fla = 1;int cur_char = 0;int pre_char = 0;freopen原创 2017-10-04 17:35:31 · 150 阅读 · 0 评论 -
三整数排序
//利用互换的思想把最大最小值换出来#includeint main(){ int a, b, c, t; scanf("%d%d%d",&a,&b,&c); if(b > a){ //保证a > b t = b; b = a; a = t; } if(c > a)原创 2016-09-01 10:25:26 · 286 阅读 · 0 评论 -
三位数反转
#includeint main(){ int n; scanf("%d", &n); printf("%d%d%d\n",n%10,n/10%10,n/100); return 0;}这是我在算法竞赛入门看到的地一个程序,确实很简单,但是如果有学单片机的同学应该对这个程序印象深刻,在1602显示部分,我们必须借助这种方式让数值显示在显示屏上原创 2016-08-28 14:18:20 · 705 阅读 · 0 评论