自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 聊聊位运算那些事(2)

引发学习位运算的原因是在网上浏览到了几道题:第一题:有一个给定的数组,其中仅有一个元素出现了一次,而其他的元素出现了两次。问如何找出这个仅出现一次的元素呢? 解:其实看到这一题的第一反应是利用数组下标法。但是它的空间复杂度是O(n),是时间复杂度是O(n).但是我们可不可再优化以下,尽量降低它的复杂度?紧接着,又想到了利用哈希表存储每个元素出现的次数,当一个元素出现两次时...

2019-05-30 21:41:45 125

原创 聊聊位运算的那些事(1)

哇,连续几天都做了dp,本来今天要继续的,但是,碰到一道貌似比较难的题吧。所以再思索一天,今天为位运算开一个头。首先,十进制数是用来人类看的,而数据在计算机中是进行二进制存储的,有时我们可以运用一些二进制数的独有的特性来进行一些问题的优化。由于二进制数都是0或1,所以这就涉及到了位运算。& 按位与 a&=b ---> a=a&...

2019-05-29 21:36:15 154

原创 动态规划之跳木桩

蒜头君面前有一排 n 个木桩,木桩的高度分别是h1,h2,h3…hn。蒜头第一步可以跳到任意一个木桩,接下来的每一步蒜头不能往回跳只能往前跳,并且跳下一个木桩的高度 不大于 当前木桩。蒜头君希望能踩到尽量多的木桩,请你帮蒜头计算,最多能踩到多少个木桩。输入格式第一行输入一个整数 n 代表木桩个数。第二行输入 n 个整数h1,h2,h3..hn,分别代表 n 个木桩的高度。(1≤n≤1000...

2019-05-28 20:32:10 953

原创 编译的错误类型

error: expected unqualified-id before 'for'原程序中的for语句位置不当,作为循环语句,应该在函数中,可您的for循环在函数之外。

2019-05-23 21:37:06 1009

原创 从一维到二维:最大子段和和最大子矩阵和

上几篇博客我们讲到了最大子段和,我们根据动态规划的思想,是可以得到其的递推公式。下面我们先分析关于一维的最大字段和的求解过程:如果给定一个数组 a[n],求其最大的子段。那么,我们会很容易的想到,运用暴力求解的方式,通过二维的遍历。但是其时间复杂度是O(n*n),显然当数据规模很大时,其肯定时tle的。所以应该利用动态规划的思想进行优化,那么优化如何着手呢。我们仍然回归到暴力求解方法中...

2019-05-23 20:42:43 364

原创 动态规划之最大非空子段和

题目:有一排n个整数,a1,a2,a3,......(1<=n<=1e6)(1e-9<=ai<=1e9)。求最大的非空字段和。这道题是非空字段和,如果直接利用上一篇博客中讲的最大子段和的代码,其结果是错的。因为当这个数组全为负数时,根据那个代码,求出最后的结果是0,相当于是空子段。本题应设置,ans为足够小的负数,当数组全为负数时,最后的结果就是数组中最大的值,...

2019-05-18 19:16:16 832

原创 动态规划之最长公共子序列

最长公共子序列,顾名思义,就是给定两个序列,求出其中长度最长的共有的子序列。如,给定1,2,4,5,6和2,4,5显然2,4,5是最长的共有序列。那么,如何分析此类问题呢?老方法,我们仍要找出前后状态之间的联系。显然,这是给定了两个序列,那么肯定是开了一个二维 的数组,进行二维的遍历。假设,a[n],b[m]是给定的序列。如果遍历的过程中,a[i-1]=b[j-1],那么显然这一状...

2019-05-18 11:29:21 335

原创 动态规划之最长上升子序列

最长上升子序列问题是经典的动态规划问题。即给定一个序列,求出长度最长,且数值由小到大的子序列。并且结果不唯一。如原始序列。2,1,5,3,6,4,6,3.其满足条件的子序列是1,3,4,6或者是2.4.5.6。那么如何分析此类问题呢。首先我们应该思考前后两个状态之间的关系,即求出其递归公式。并且是最大问题,当前一状态是最大的,那么后一状态同样是最大的。假设此状态是dp[5],那dp...

2019-05-17 21:19:14 217

原创 动态规划之小朋友过河问题

小朋友过桥问题:在一个夜黑风高的晚上,有n(n <= 50)个小朋友在桥的这边,现在他们需要过桥,但是由于桥很窄,每次只允许不大于两人通过,他们只有一个手电筒,所以每次过桥的两个人需要把手电筒带回来,i号小朋友过桥的时间为T[i],两个人过桥的总时间为二者中时间长者。问所有小朋友过桥的总时间最短是多少。思路分析:假设过河有四个小朋友,其过河时间分别为1,2,3,4。我们先从...

2019-05-12 21:29:04 3399 9

原创 常用的数据结构之二叉排序树

首先先理解二叉排序树的定义。二叉排序树满足以下三个性质:1,若它的左子树不为空,则其左子树上的所有关键字的值均小于根关键字上的值。2,若它的右子树不为空,则右子树上所有关键字的值均大于根关键字上的值。3,左右子树又是一颗二叉排序树。二叉排序树通常用二叉链表来存储的。 typedef struct BTNode{ int key; struct BTNode *lchi...

2019-05-10 20:06:00 286

原创 常用的数据结构之折半查找

折半查找使用的条件首先就是,其序列是有序的。基本思想就是,每次比较该序列的中间的元素,若相等则查找成功,若大于该中间值,则去右半部分子序列进行再此的比较,若小于该中间值,则去左半部分的子序列进行再次的比较。直至该子序列的长度等于一。代码如下:void midsearch(int a[],int low,int hight,int k){ int mid; while(low<...

2019-05-09 20:04:51 724

原创 常用的数据结构之顺序顺序查找法

顺序查找,顾名思义其实按照线性顺序来进行查找。即顺序扫描当前线性表,依次将扫描到的关键字与任一给定的值作比较,如是,则查找成功,否则就失败。下面用一个简单的代码来实现。这是最简单的一种查找方式了。不管成不成功,其算法时间复杂度均为O(n).void Search(int a[],int n,int k)//待查数组为a[],其数目为n,k为待查找数。{for(int i=0;i&lt...

2019-05-09 19:49:14 2976

原创 计蒜客之墙壁涂色

题目大意蒜头君觉得白色的墙面好单调,他决定给房间的墙面涂上颜色。他买了 3 种颜料分别是红、黄、蓝,然后把房间的墙壁竖直地划分成 n 个部分,蒜头希望每个相邻的部分颜色不能相同。他想知道一共有多少种给房间上色的方案。例如,当 n=5 时,下面就是一种合法方案。由于墙壁是一个环形,所以下面这个方案就是不合法的。输入格式一个整数 nn,表示房间被划分成多少部分。(1≤n≤50)...

2019-05-08 20:42:08 281

原创 常用数据结构之桶式排序

关于桶式排序,其实以前见到过,当成了一个排序技巧来记了。具体就是,有一个序列,有n个数,并且每个数取值范围是0~100。问如何快速的进行排序。那么我们可以很容易想到,就是在开一个大小为一百的数组,并且初始化为0,然后遍历所给的序列,比如遍历到了23,就把23放入新开数组下标为23的位置上,具体表现在加1,这样最后在重新遍历新开的数组,当元素不为0时输出下标,这样序列就从小到大排好了。其当然有一...

2019-05-05 19:40:33 593

原创 常用的数据结构之二路归并排序

其排序算法的基本思想就是,将原序列**(假设有n个关键字)**分成很多个子序列每个子序列就有一个关键字且子序列之间是个不相同的。之后就是将两两的子序列进行合并,所以整个数据规模就变成了n/2,之后在进行重复操作,数据规模不断的除以2,直至变为1。以下是代码:void Merge(int A,int low,,int mid ,int high ){ int i=low; int j=m...

2019-05-05 16:54:40 437

转载 关于exit与return

exit(0):正常运行程序并退出程序;exit(1):非正常运行导致退出程序;return():返回函数,若在主函数中,则会退出函数并返回一值。详细说:1. return返回函数值,是关键字; exit 是一个函数。2. return是语言级别的,它表示了调用堆栈的返回;而exit是系统调用级别的,它表示了一个进程的结束。3. return是函数的退出(返回);exit是进...

2019-05-05 16:35:08 140

原创 常用数据结构之堆排序

堆是一种数据结构,可以把他看作是一个完全二叉树,这个二叉树满足任何一个父结点都不大于或小于其左右孩子的值。若父亲大而孩子小,则叫做大顶堆,相反的叫做小顶堆。在应用堆排序时,可以选择大顶堆或小顶堆,当使用大顶堆时排序出来的序列时非递减的(非递减不等于递增,因为其可能有相同的排序关键字),以下的代码采用了大顶堆的方式。void void Sift(int low,int hight,int ...

2019-05-04 21:18:40 191

空空如也

空空如也

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

TA关注的人

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