C++
fjqcyq2
这个作者很懒,什么都没留下…
展开
-
C++求字符串长度的若干方法
最近在准备复习字符串的操作,仅作为记录,难免有误自定义函数实现strlen功能int slen(char *p){ if (p==NULL) { return 0; } int len=0; while((*p++) != '\0') ++len; return len ;}不用中间变量实现,使用递归进行实现int recu原创 2015-01-21 21:11:06 · 1131 阅读 · 0 评论 -
八皇后问题--递归和非递归
八皇后问题是一个以国际象棋为背景的问题:如何能够在 8×8 的国际象棋棋盘上放置八个皇后,使得任何一个皇后都无法直接吃掉其他的皇后?为了达到此目的,任两个皇后都不能处于同一条横行、纵行或斜线上。八皇后问题可以推广为更一般的n皇后摆放问题:这时棋盘的大小变为n×n,而皇后个数也变成n。这个问题简化描述就是:在8x8的棋盘上放8颗子,要求它们【不在同一行】【不在同一列】【不在同一斜线】上。面对问题,我们转载 2015-10-05 15:59:20 · 563 阅读 · 0 评论 -
宏定义(const)和常量定义(#define)的区别
宏定义(const)和常量定义(#define)的区别(转载)1.效果-《高质量C++/C编程指南》C++ 语言可以用const 来定义常量,也可以用#define 来定义常量。但是前者比后者有更多的优点: (1) const 常量有数据类型,而宏常量没有数据类型。编译器可以对前者进行类型安全检查。而对后者只进行字符替换,没有类型安全检查,并且在字符替换可能会产生意料不到的错误(边际效应)。 (转载 2015-07-27 18:47:36 · 583 阅读 · 0 评论 -
C++ static、const和static const 以及它们的初始化
const定义的常量在超出其作用域之后其空间会被释放,而static定义的静态常量在函数执行后不会释放其存储空间。 static表示的是静态的。类的静态成员函数、静态成员变量是和类相关的,而不是和类的具体对象相关的。即使没有具体对象,也能调用类的静态成员函数和成员变量。一般类的静态函数几乎就是一个全局函数,只不过它的作用域限于包含它的文件中。 在C++中,static静态转载 2015-10-03 22:13:46 · 348 阅读 · 0 评论 -
C++ map容器 按照value值排序
正常的map默认按照key值排序,而map又没有像vector一样的sort()函数,那么如果将map按照value值排序呢?有两种方法:**方法1. 将map中的key和value分别存放在一个pair类型的vector中,然后利用vector的sort函数排序,其中map_verb存放我的map值: 存放我的map值:**#include<algorithm>typedef pair<stri转载 2015-10-04 17:19:48 · 665 阅读 · 0 评论 -
如何限制对象只能建立在堆上或者栈上
在C++中,类的对象建立分为两种,一种是静态建立,如A a;另一种是动态建立,如A* ptr=new A;这两种方式是有区别的。 静态建立一个类对象,是由编译器为对象在栈空间中分配内存,是通过直接移动栈顶指针,挪出适当的空间,然后在这片内存空间上调用构造函数形成一个栈对象。使用这种方法,直接调用类的构造函数。 动态建立类对象,是使用new运算符将对象建立在堆空间中。这个过程分为两步,第一转载 2015-10-03 20:28:40 · 644 阅读 · 0 评论 -
C++设计模式——单例模式
参考网址 : http://www.jellythink.com/archives/82转载 2015-10-04 09:22:38 · 305 阅读 · 0 评论 -
三种工厂模式的C++实现
三种工厂模式的C++实现:SoapBase, SFJ,XSL,NAS等 http://blog.csdn.net/silangquan/article/details/20492293转载 2015-10-04 11:16:05 · 390 阅读 · 0 评论 -
剑指offer--字符串的排列
题目描述输入一个字符串,按字典序打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba。 结果请按字母顺序输出。 上代码:class Solution {public: void permute(string prefix, string str, vector<string> &v1){原创 2015-10-05 11:11:39 · 361 阅读 · 0 评论 -
一个数组中只有0,1,2三个元素,进行排序,要求时间复杂度为O(n)
思路: 设置三个标记指针,pos0,pos2,cur 令pos0从前往后遍历,指向第一个非0的位置,pos2从后往前遍历,指向第一个非2的位置 然后cur从pos0开始往后遍历: 遇到0就和pos0交换,pos0++; 遇到1什么也不做; 遇到2就和pos2交换,pos2向前滑动到下一个非2的位置,交换后还要重新检查cur的值; 直到cur与pos2相遇。 一次遍历,复杂度是O(n)原创 2015-10-06 10:03:42 · 5132 阅读 · 1 评论 -
《编程之美》小飞的电梯调度算法
亚洲微软研究院所在的希格玛大厦一共有6部电梯。在高峰时间,每层都有人上下,电梯每层都停。实习生小飞常常会被每层都停的电梯弄的很不耐烦,于是他提出了这样一个办法: 由于楼层并不算太高,那么在繁忙的上下班时间,每次电梯从一层往上走时,我们只允许电梯停在其中的某一层。所有乘客从一楼上电梯,到达某层后,电梯停下来,所有乘客再从这里爬楼梯到自己的目的层。在一楼的时候,每个乘客选择自己的目的层,电梯则计算出应转载 2015-10-06 11:36:03 · 692 阅读 · 0 评论 -
KMP小计
KMP之前一直困扰了好久,说抽时间搞明白也是一直没时间,现在有点明白,但又时间太紧,所以仅记个大概来,方便我自己以后回顾。KMP之所以效率比较高,是因为模式串中有重复的元素。设S为主串,则要匹配的模式串就是T串。也就是说T串中有重复的元素,比如: T = “abababc” 可以看出abababc中有重复的串,即前四位abab与从第2-5位的串是一样的(从0开始) 则根据其他参考资料,T的nex原创 2015-08-12 15:27:35 · 371 阅读 · 0 评论 -
Magic Index 分析
给定一个数组A,其中有一个位置被称为Magic Index,含义是:如果i是Magic Index,则A[i] = i。假设A中的元素递增有序、且不重复,请给出方法,找到这个Magic Index。更进一步,当A中允许有重复的元素,该怎么办呢?没有重复元素的情况一些同学在遇到这个题目的时候,往往会觉得比较简单。扫描一遍,不就ok了么?O(n)的。很简单呀。可是,大家要注意到,还有一个条件没有用:A中转载 2015-10-06 14:52:27 · 638 阅读 · 0 评论 -
旋转有序数组的二分查找
总结规律,简化模型 题目都不难,重要的是很敏锐的发现问题的规律。旋转有序数组的二分搜索,如 int arr[N] = {15,16,19,20,25,1,3,4,5,7,10,14}; 查找X = 5 主要思想: 每次根据L和R求出M后,M左边[L, M]和右边[M+1, R]这两部分中至少一个是有序的。 arr[M]和X比较 (1). arr[M]==X,返回M (2). arr[转载 2015-10-03 19:11:36 · 751 阅读 · 0 评论 -
最长不下降子序列的O(n)算法
最长不下降子序列(LIS:Longest Increasing Subsequence) 问题描述:给出n个数,求出其最长不下降子序列的长度,比如n=5,5个数是{4,6,5,7,3};其最长下降子序列就是{4,6,7},长度为3。 看了好多网上的算法一般的都是O(N^2), 最好的是O(NLogN). 我想到一个能在O(N)的时间内解决这个问题。 具体方案如下: 该问题可以转换为剑指off原创 2015-09-02 20:00:39 · 2251 阅读 · 2 评论 -
strcpy和memcpy有何不同
strcpy和memcpy都是标准的C库函数,主要由以下3种区别:复制内容不同。strcpy只能复制字符串,而memcpy可以复制任意内容,例如字符数组、整形、结构体、类等。strcpy只能用与字符串的复制,并且除了复制字符串内容之外,还会复制字符串的结束符。memcpy对此没有要求,因此用途更广。复制的方法不同。strcpy不需要指定字符串长度,它遇到被复制的字符串的结束符‘\0’才翻译 2015-01-21 22:48:25 · 464 阅读 · 0 评论 -
阿里笔试之最长公共子串
题目描述:给定一个query和一个text,均由小写字母组成。要求在text中找出以同样的顺序连续出现在query中的最长连续字母序列的长度。例如,query为“acbac”,text为“acaccbabb”,那么text中的“cba”为最长的连续出现在query中的字母序列,因此,返回结果应该为其长度3。请注意程序效率。思路:用一个矩阵来记录两个字符串中所有位置的两个字符之间的匹转载 2015-03-16 19:54:25 · 415 阅读 · 0 评论 -
自己动手写字符串比较函数strcmp()
最近用到了字符串比较的函数,用到strcmp函数。除了知道怎么用之外,我觉得有必要把它的源码搞一搞。搜到网上流传的strcmp函数的源码是如下:int strcmp (const char * src, const char * dst){ int ret = 0 ; while( ! (ret = *(unsigned char *)src - *(u原创 2015-05-13 10:50:04 · 1611 阅读 · 0 评论 -
斐波那契数列的各种算法实现
斐波那契数列,但凡学过编程的童鞋们应该都懂,背景就不介绍了(就是大兔子生小兔子的故事),无论是面试还是实际的运用,常见的一个思路就是先用最先基本的办法实现,然后根据实际要求,一步步改进,优化算法效率。今天就以斐波那契数列这个大家都很熟悉的为例来小小感受一下。Version 1long Fibonacci(int n) { if (n == 0) return 0;转载 2015-05-27 22:50:08 · 636 阅读 · 0 评论 -
稳定排序和不稳定排序(转载)
稳定排序和不稳定排序(转载)首先,排序算法的稳定性大家应该都知道,通俗地讲就是能保证排序前2个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同。在简单形式化一下,如果Ai = Aj, Ai原来在位置前,排序后Ai还是要在Aj位置前。 其次,说一下稳定性的好处。排序算法如果是稳定的,那么从一个键上排序,然后再从另一个键上排序,第一个键排序的结果可以为第二个键排序所用。基数排序就 是这样转载 2015-07-27 16:21:42 · 337 阅读 · 0 评论 -
最长重复子串,最长公共子序列, 最长公共子串
最长重复子串,最长公共子序列, 最长公共子串原题:首先这是一个单字符串问题。子字符串R 在字符串L 中至少出现两次,则称R 是L 的重复子串。重复子串又分为可重叠重复子串和不可重叠重复子串,这里只是简单讨论最长可重叠的重复子串,给出基本算法。最长重复子串 用最笨的方法,逐个扫描,时间复杂度O(N^2), 代码如下,亲测可用:int LCS::comLen(const char*p, const c原创 2015-08-11 20:26:33 · 1139 阅读 · 0 评论 -
大数乘法
大数乘法 一般来说涉及到大数的,都会先将其转换为字符串,然后根据进行对应的字符串运算,最后再将结果输出。#include<iostream>#include<string>using namespace std;int bigMultiply();int main(){ char str1[1000],str2[1000]; int i,j,len1,len2,len;原创 2015-08-12 19:33:29 · 906 阅读 · 0 评论 -
字符串全排列
字符串全排列问题:给定字符串S,生成该字符串的全排列。方法:依次从字符串中取出一个字符作为最终排列的第一个字符,对剩余字符组成的字符串生成全排列,最终结果为取出的字符和剩余子串全排列的组合:#include <iostream>#include <string>using namespace std;void permute(string prefix, string str){ if原创 2015-08-29 12:02:08 · 655 阅读 · 0 评论 -
给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。
给定一个奇数n,比如n=3,生成1到n平方的数,如1到9,填入九宫格,使得横竖斜的和都相等。如题,给定一个奇数n,然后填充n*n的矩阵方格,使得矩阵中的每行、每列、斜对角线的和均相等。并且填的数字都不同,且正好为[1, n*n]之间的整数。 该题的大致思路是这样的: 以n等于3为例,首先将第0行第1列填充为1,然后向右向上逐渐递增填写数字。具体代码如下:void nineGongGe( int原创 2015-08-17 09:51:39 · 4556 阅读 · 0 评论 -
求字符串中最长无重复字符的子串
题目:求一个字符串中最长的没有重复字符的子串。 例如字符串“abcdaefgh” 使用hash表记录是否之前的字符出现,具体代码如下://O(N^2)的时间复杂度int max_unique_substring2(char * str) { int i,j; int begin; int maxlen = 0; int hash[256]; int n转载 2015-09-01 10:28:04 · 610 阅读 · 0 评论 -
关于memset函数
今天突然发现memset的原理,如memset(p,0,sizeof(p)),这句话特别常见,讲所有的元素初始化为0,但是memset(p,1,sizeof(p)),却是将所有的元素初始化为16843009,以前也知道不能初始化为1,但是原因就不得而知了。那天研究别人代码,发现一句相当于是memset(p,243,sizeof(p))的语句,却是把整个数组赋值为-202116109,我十分不解。。本转载 2015-09-01 10:31:31 · 1400 阅读 · 0 评论 -
最长重复子串与最长重复子序列
仅为自己做个记录,仅供参考原创 2015-09-02 21:03:03 · 1383 阅读 · 0 评论 -
丑数
题目:我们把只包含因子2、3和5的数称作丑数(Ugly Number)。例如6、8都是丑数,但14不是,因为它包含因子7。习惯上我们把1当做是第一个丑数。求按从小到大的顺序的第1500个丑数 暴力求解方法虽然简单,但是时间复杂度太高。剑指offer上有如下代码:int ThreeMin(int a, int b, int c){ int result = a<b?a:b; resu原创 2015-10-06 15:58:25 · 431 阅读 · 0 评论