自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

feiqiangs的专栏

feiqiangs的学习心得

  • 博客(18)
  • 收藏
  • 关注

转载 C++中static的作用总结

主要有以下作用:【1】在函数体,局部的static变量。生存期为程序的整个生命周期,(它存活多长时间);作用域却在函数体内(它在什么地方能被访问(空间))。 一个被声明为静态的变量在这一函数被调用过程中维持其值不变。因为它分配在静态存储区,函数调用结束后并不释放单元,但是在其它的作用域的无法访问。当再次调用这个函数时,这个局部的静态变量还存活,而且用在它的访问空间,因此访问到的是上次调

2016-09-23 11:31:04 305

原创 C语言实现多态

综述多态性是面向对象程序设计的一个重要特征,利用多态性可以设计和实现一个易于扩展的系统。顾名思义,多态的意思是多种形态,在C++程序设计中,多态指的是:具有不同功能的函数可以用同一个函数名,这样可以用一个函数名调用不同内容的函数。C++的多态分两种:静态多态性和动态多态性。1. C++中的函数重载和运算符重载实现的多态性就属于静态多态,在程序编译时系统就能决定调用的是哪个函数,因此

2016-09-23 01:53:38 13719 2

原创 数据流的中位数

题目:如何得到一个数据流中的中位数?如果从数据流中读出奇数个数值,那么中位数就是所有数值排序之后位于中间的数值。如果从数据流中读出偶数个数值,那么中位数就是所有数值排序之后中间两个数的平均值。解题思路:将数字放入两个堆,一个小堆 min_h 一个大堆max_h 大堆存放的是数组中最小的一半数据,小堆存放着数组中最大的一半数据。那么小堆的堆顶和大堆的堆顶就是构造中位数的关键数字: 如果大堆数

2016-09-18 02:29:42 238

原创 序列化二叉树

问题:实现两个函数,序列化一个二叉树。如果之前做过一个题目: 用一颗二叉树的中序和前序还原二叉树的话,最直观的解法是用把二叉树系列化成一个中序序列和一个前序序列,但是这个方法的缺陷是每个节点上的值不能相同,而且需要将整个序列都读入之后才能序列化,如果序列到一个流中,在从流中读出来还原二叉树效率将会比较低。其实序列化的时候只需要前序就可以了,只是遍历到每个NULL指针的时候对应的序列

2016-09-17 23:10:44 195

原创 正则表达式匹配

题目:请实现一个函数用来匹配包括'.'和'*'的正则表达式。模式中的字符'.'表示任意一个字符,而'*'表示它前面的字符可以出现任意次(包含0次)。 在本题中,匹配是指字符串的所有字符匹配整个模式。例如,字符串"aaa"与模式"a.a"和"ab*ac*a"匹配,但是与"aa.a"和"ab*a"均不匹配。1.如果pattern下一位是 *:   1.1 如果pattern 当前位和str 当

2016-09-17 15:35:49 254

原创 正整数的和

题目:输入一个正整数s打印出s的连续正整数合(至少含有两个数字)如15 ,由于1+2+3+4+5 = 4+5+6 = 7+8 = 15 所以结果是 {1,2,3,4,5}{4,5,6}{7,8}设两个数small big,求从small 到big连续正整数的和,如果和正好是目标值,则找到一个解,否则: 1.如果当前和大于目标值,则small ++ ,2.如果小于目标值则 big ++.

2016-09-16 21:32:23 665

原创 数组中的逆序对

问题:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数P。并将P对1000000007取模的结果输出。 即输出P%1000000007 思路:最简单的思路是遍历数组,把当前数组元素和它后面的相比较,如果是逆序对,则计数器加1.时间复杂度是o(n^2),还有一个利用归并排序思想的方法时间复杂度是O(nlogn).下面是我用

2016-09-16 18:22:45 309

原创 把数组排成最小数

题目:输入一个正数数组,把数组中所有的数字拼接起来排成一个数,打印能排列出来的数的最小的那一个例如输入{3,32,321} 输出的应该是 321323这个题目的直观做法是先求出所有可能的排列,然后找到最小的那个。但是n个数字的排列有n!个,时间复杂度太高。同时应该注意,如果直接将输出类型定义为int类型的话,如果数组中的值比较大,加合完之后的值可能会超出int类型,因此最好用string

2016-09-16 12:42:12 352

原创 字符串的所有排列

输入一个字符串,打印出该字符串的所有排列,例如输入字符串abc ,则打印出a,b,c 所能排列出来的所有字符串 abc,acd,bac,bca,cab,cba。看似简单,其实不是很好做,应该把问题分解为子问题,我们把字符串看成两个部分,首字母自己作为一部分,后面的其他节点当做其它部分。可以看成两部走:求出所有课程出现在第一位的字符 a和后面的bc交换。第二步:固定第一个字符,求后面所有

2016-09-15 22:05:15 325

原创 求不相邻的最大子数组和

问题1:给出一个数组,求出其中一个子集,使得子集中每个元素在原数组中两两都不相邻并使子集的和最大。解法:对任意一个元素ai ,有两种可能: 选ai ,单选了ai 就不能选ai-1 ;不选ai 那么ai-1 可以选也可以不选,主要根据ai-2的情况,因此动态规划是这样设计的。 ds[i] 表示选i,a0....ai的最大子数组和;ns[i]表示不选择 i,a0 ....ai 的最大子数组

2016-09-14 22:32:59 1774

原创 旋转数组的最小数字

题目:把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转。输入一个递增排序的的数组的旋转,输出旋转数组的最小元素,如{3,4,5,1,2}位{1,2,3,4,5}的数组旋转。最小值是1思路:用二分查找法#include#include#include#include#includeusing namespace std;/** * Definition

2016-09-13 17:29:08 199

原创 前序序列和中序序列还原树

题目:输入某二叉树前序中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中不包含重复数字。例如 输入前序遍历{1,2,4,7,5,6,8} 和中序遍历{4,7,2,1,5,3,8,6}以下是我用c++的实现#include#include#include#include#includeusing namespace std;/** * Definition

2016-09-13 15:24:51 1069

原创 二维数组中的查找

在一个二维数组中,每一行都按照从左到右递增的顺序排列,每一列都按照从上到下递增的排列,请完成一个函数,输入这样的二维数组和一个整数,判断数组中是否有该整数,如果有返回true,没有返回false#include#include#includeusing namespace std;bool func(int nums[][10],int val,int row_len,int

2016-09-12 23:50:59 195

原创 二分查找的递归与非递归实现

假设有一个已经升序排好序的数组 nums,和一个数值val ,求val 是否在nums 中,如果存在则返回nums对应项的index ,否则返回-1;递归实现:#include#include#includeusing namespace std;int func(int val,int nums[],int begin,int end){ if(begin > end)

2016-09-12 21:44:38 206

原创 最长公共子串的动态规划解法及其优化

最长公共子串问题是:给定两个字符串str1和str2,返回两个字符串的最长公共子串(必须连续)举例: str1 = "abcd12" str2="ebcd32" 它们的最长公共子串是 "bcd"原始解法:设dp[i][j] 表示 以str1[i]和str2[j]最为公共子串的最后一个字符的情况下,公共子串最长能有多长。边界值: 如果 str1[i] = str2[0]则

2016-09-12 21:24:42 2808

原创 最长公共子序列

最长公共子序列问题是经典的动态规划问题:给定两个字符串str1和str2,返回两个字符串的最长公共子序列(不一定要连续)。举例: str1="a1b2c3d4" str2="a2b3c4e" 它们的最长公共子串是"abc"下面是c++代码实现#include#include#includeusing namespace std;int main(){ string st

2016-09-12 11:21:17 223

转载 和为0的最长子串

已知一个数组只有 1和-1,求它和为0的最长子串长度。如 数组{-1,1,-1,-1,1,1,1,1,1} 和为0的最长子串为 {-1,1,-1,-1,1,1} 答案为6.之前一直想的是用动态规划,但是试了半天已知没有找到规律,后来看了看这篇文章:http://blog.csdn.net/fishermandong/article/details/52459059  顿时有了思路,下面是我实现

2016-09-07 22:47:28 1447

原创 快排的递归和非递归实现

快排的思路可以参考文章:http://developer.51cto.com/art/201403/430986.htm下面是我的递归和非递归实现。递归实现:int nums[100];void qsort(int left,int right){ if(left > right) return; int temp = nums[left]; int

2016-09-06 17:59:40 445

空空如也

空空如也

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

TA关注的人

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