C++/C
文章平均质量分 83
martin_liang
这个作者很懒,什么都没留下…
展开
-
Leetcode 213. 打家劫舍 II
你是一个专业的小偷,计划偷窃沿街的房屋,每间房内都藏有一定的现金。这个地方所有的房屋都围成一圈,这意味着第一个房屋和最后一个房屋是紧挨着的。同时,相邻的房屋装有相互连通的防盗系统,如果两间相邻的房屋在同一晚上被小偷闯入,系统会自动报警。给定一个代表每个房屋存放金额的非负整数数组,计算你在不触动警报装置的情况下,能够偷窃到的最高金额。class Solution {public: ...原创 2020-03-29 21:46:19 · 321 阅读 · 0 评论 -
深入理解strcpy,strncpy
转自出处~对初学者属于深入理解吧,高手请勿在此浪费宝贵时间~看到这样一个改错题:char p[5]; char* s="12345"; strcpy(p,s); cout 错误之处是很显然的,作为字符串字面值的"12345"会在结尾处自动加上空字符null,从而长度是6,上面的strcpy是会越界的,从而是个越界错误。问题是我以为这样的程序编转载 2012-05-28 17:21:57 · 586 阅读 · 0 评论 -
一个简单smart pointer的实现
转自出处 学习这个代码有助于理解shared_ptr指针的实现方法 smart.cpp 1 namespace smart 2 { 3 // 引用计数类. 4 class smart_count 5 { 6 public: 7 smart_count(int c = 0) : use转载 2012-07-29 01:09:18 · 2132 阅读 · 0 评论 -
虚继承---虚基类
转自出处虚继承就是虚基类的使用;引入虚基类的目的是为了解决类继承过程中产生的二义性问题;这种二义性问题常见于具有菱形继承关系的类中;比如:有四个类:A、B、C、D;它们之间的继承关系是:B继承A,C继承A,D继承B和C;这就形成了一个菱形的继承关系;具有这种继承关系的图叫做有向无环图;那么类D就有两条继承路径:D-->B-->A和D-->C-->A;而类A是派生类D转载 2012-08-31 14:37:07 · 1199 阅读 · 0 评论 -
设计一个栈,出栈时弹出栈中最小的元素,时间复杂度为1
Given a few numbers, how will you push them into a stack such that whenever I pop the top most element from that stack, I get the minimum number from the bunch. Also he wanted me to tell the pop pus原创 2012-09-02 22:31:58 · 786 阅读 · 0 评论 -
如何将二维数组作为函数的参数传递
转自出处如何将二维数组作为函数的参数传递 今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何处理二维数组当作参数传递的情况,希望大家不至于再在这上面浪费时间。正文: 首先,我引用了谭浩强先生编著的《C程序设计》上面的一节原文,它简要介绍了如何将二维数转载 2012-09-07 11:40:01 · 525 阅读 · 0 评论 -
删除字符串中连续的两个0
char* removeSuccessTwoZero(char *Array){ char *pCur; char *pCopy; int iZeroNum = 0; pCur = pCopy = Array; while(*pCur != '\0') { if (*pCur == '0') {原创 2012-09-26 00:12:20 · 1425 阅读 · 0 评论 -
交换一个无符号整形数的奇偶位
void OddEventBitSwap1(unsigned &A){ unsigned int mask = 0x3; int loop = sizeof(unsigned)*8/2; for(int idx = 0; idx < loop; idx++) { if (((A & mask) != mask) && ((A & mask) !=原创 2012-09-24 21:14:32 · 666 阅读 · 0 评论 -
把已排序的双向链表转变成平衡二叉树
#include "stdafx.h"#include "vector"#include "list"typedef struct node{ int val; struct node *pre; struct node *rear;}NODE;NODE *getMiddleNode(NODE *pStart, NODE *pEnd){ NOD原创 2012-09-25 23:20:34 · 1482 阅读 · 0 评论 -
按层输出二叉树
void printLevel(NODE *pHead){ std::list NodeList; //这里不能用vector NODE *pCur = pHead; if (!pHead) return; NodeList.push_back(pHead); std::list::iterator itr = NodeList.b原创 2012-09-25 23:29:31 · 2150 阅读 · 0 评论 -
把一个BST变为Double Link
NODE *bst_to_dll(NODE *pNode, NODE **ppHead){ static NODE *prev; //通过static来保存prev是这个算法的关键 if (pNode) { bst_to_dll(pNode->left, ppHead); if(prev == NULL) {原创 2012-10-31 00:13:26 · 475 阅读 · 0 评论 -
用一个随机生成N的函数构造随机生成M的函数
1. 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10分析:要保证rand10()在整数1-10的均匀分布,可以构造一个1-10*n的均匀分布的随机整数区间(n为任何正整数)。假设x是这个1-10*n区间上的一个随机整数,那么x%10+1就是均匀分布在1-10区间上的整数。由于(rand7()-1)*7+rand7()可以构转载 2012-11-04 23:22:11 · 1118 阅读 · 0 评论 -
用bit map进行数组排序
//定义每个Byte中有8个Bit位#include <memory.h>#define BYTESIZE 8void SetBit(char *p, int posi){ for(int i=0; i < (posi/BYTESIZE); i++) { p++; } *p = *p|(0x01<<(posi%BYTESIZE));//将该Bit位赋值1转载 2012-11-10 23:39:31 · 670 阅读 · 0 评论 -
百度2013年校招笔试题——pszStringRotate
转自出处百度2013校园招聘笔试题 算法与程序设计 第4题: 字符串左移,void *pszStringRotate(char *pszString, int nCharsRotate),比如ABCDEFG,移3位变DEFGABC,要求空间复杂度O(1),时间复杂度O(n)。 字符串位移,再简单不过了,方法也很多. 有朴素算法(逐位移动,移动n转载 2012-11-13 00:29:10 · 763 阅读 · 0 评论 -
百度2013校园招聘笔试题[软件研发]及答案
转自出处 一、简答题1.简述数据库以及线程死锁产生的原理及必要条件,简述如何避免死锁。1)互斥条件:指进程对所分配到的资源进行排它性使用,即在一段时间内某资源只由一个进程占用。如果此时还有其它进程请求资源,则请求者只能等待,直至占有资源的进程用毕释放。2)请求和保持条件:指进程已经保持至少一个资源,但又提出了新的资源请求,而该资源已被其它进程占有,此时请求进程阻塞,但又转载 2012-11-13 00:41:21 · 727 阅读 · 0 评论 -
求字符串的所有子集
// 字符串的组合输出.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "string.h"#include #include #include using namespace std; /** 输出 * 1* 12* 123* 1234原创 2012-06-05 00:13:41 · 1419 阅读 · 0 评论 -
大数相乘
// 大数相乘.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include #include using namespace std;// 12345//* 45//------std::string Multiple(std::string &STR1,原创 2012-11-14 22:20:33 · 390 阅读 · 0 评论 -
快速排序(非递归算法)
// 快速排序_非递归.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include using namespace std;int myArray[] = {3,0,6,1,11,7,2,12,4,10,9,5,8};void printArray(int *Arr原创 2012-11-16 23:22:39 · 819 阅读 · 0 评论 -
去除string中空格的方法
转自出处http://stackoverflow.com/questions/83439/remove-spaces-from-stdstring-in-cThe best thing to do is to use the algorithm remove_if and isspace:remove_if(str.begin(), str.end(), i转载 2012-12-05 11:59:09 · 903 阅读 · 0 评论 -
blogs
值得关注的博客地址:http://blog.csdn.net/hackbuteer1/article/category/830720http://www.cnblogs.com/hlxs/archive/2011/09/01/2161940.htmlhttp://bbs.csdn.net/topics/390222747http://blog.csdn.net/wuchuanp原创 2012-11-10 23:27:07 · 416 阅读 · 0 评论 -
按层次打印二叉树
void printLevelOrder(BinaryTree *root) { if (!root) return; queue nodesQueue; int nodesInCurrentLevel = 1; int nodesInNextLevel = 0; nodesQueue.push(root); while (!nodesQueue.empty()) {原创 2013-01-09 00:29:26 · 1078 阅读 · 0 评论 -
数组排列,使得数组的值最大
#include #include #include #include using namespace std;void SortMax(int* arr, int len);bool StringCompare(string s1, string s2);string toString(int val);int main(){ int arr[5] =原创 2013-01-13 23:22:56 · 714 阅读 · 0 评论 -
二维数组行列递增排列,找出第K小的数
这道题之前我想了很久,但是由于思路不对,一直没有很好解决,今晚看到了一个方案,顿时茅塞顿开先贴上代码int min = a[0][0];int minOfRows[rows];for(i = 0; i < rows; i++) minOfRows[i] = 0;minOfRows[0] = 1; for(i = 1; i < k; i++){ m原创 2013-01-19 23:37:52 · 5228 阅读 · 0 评论 -
删除整形数组中的冗余整数
转自出处题目:给一个未排序的n个元素的数组,数组中所有的元素都在1到n之间,删除数组中所有冗余的数字例如: {1,3,2,3,2,6,4,3}删除冗余后数组: {1,2,3,4,6} 方法一:可以利用哈希表的方法,将所有的数字映射到a[n],如果整数i出现过,则a[i-1]++,最后输出所有a[i] >0的整数即可。这个方法需要o(n)的转载 2013-01-22 00:00:19 · 734 阅读 · 0 评论 -
判断一个括号字符串是否配对出现
转自出处Stack *s = new Stack();for (int i = 0; i < strlen(str): i++){ if ((str[i] == '{') || (str[i] == '[') || (str[i] == '(')) s->push(str[i]); else { char tp = s->po转载 2013-02-13 00:04:25 · 1675 阅读 · 0 评论 -
用二进制方式打印unsigned int
void bin(unsigned int &A){ for (i = 1 0; i >>= 1) { (i & A)?printf("1"): printf("0"); } printf("\n");}若输入的是 15, 打印的结果是 0000000000001111;void bin2(unsigned int &A){ i原创 2013-02-16 21:27:37 · 1530 阅读 · 0 评论 -
二维数组中,值最大的连续子数组
转自出处// Program to find maximum sum subarray in a given 2D array#include #include #include #define ROW 4#define COL 5 // Implementation of Kadane's algorithm for 1D array. The function ret转载 2013-03-03 23:46:19 · 756 阅读 · 0 评论 -
求字符串的所有子集2
// 求字符串的所有子集2.cpp : Defines the entry point for the console application.//#include "stdafx.h"#include "string.h"#include #include #include using namespace std;/** ABCD* ABC* ABD*原创 2013-02-24 14:51:14 · 1799 阅读 · 0 评论 -
跳台阶问题(变态跳台阶)
转自出处题目1:一个台阶总共有n级,如果一次可以跳1级,也可以跳2级。求总共有多少总跳法,并分析算法的时间复杂度。分析:这道题最近经常出现,包括MicroStrategy等比较重视算法的公司都曾先后选用过个这道题作为面试题或者笔试题。首先我们考虑最简单的情况。如果只有1级台阶,那显然只有一种跳法。如果有2级台阶,那就有两种跳的方法了:一种是分两次跳,每次跳1级;另外转载 2013-03-11 21:41:29 · 4969 阅读 · 1 评论 -
遍历二叉树的各种操作(非递归遍历)
转自出处 先使用先序的方法建立一棵二叉树,然后分别使用递归与非递归的方法实现前序、中序、后序遍历二叉树,并使用了两种方法来进行层次遍历二叉树,一种方法就是使用STL中的queue,另外一种方法就是定义了一个数组队列,分别使用了front和rear两个数组的下标来表示入队与出队,还有两个操作就是求二叉树的深度、结点数。。。[cpp] view pl转载 2013-03-11 18:50:14 · 717 阅读 · 0 评论 -
按一定间隔翻转链表
// revert link at interval.cpp : Defines the entry point for the console application.//#include "stdafx.h"typedef struct node{ int val; struct node* next;}Node;/*1->2->3->4->5->6->73->2-原创 2013-03-12 23:49:12 · 902 阅读 · 0 评论 -
重新移动数字的元素使得后半部元素间隔插入前半部
// 重新移动数字的元素使得后半部元素间隔插入前半部.cpp : Defines the entry point for the console application.//// a1a2a3a4a5a6 b1b2b3b4b5b6 -> a1b1a2b2a3b3a4b4a5b5a6b6#include "stdafx.h"#include void swapArray(char原创 2013-03-13 00:23:55 · 656 阅读 · 0 评论 -
数组两边分边排序, in place merge 数组,使得整个数组有序
// 数组两边分边排序, in place merge 数组,使得整个数组有序.cpp : Defines the entry point for the console application.//#include "stdafx.h"void swap(int &A, int &B){ int tmp = A; A = B; B = tmp;}void reSortA原创 2013-03-01 17:10:12 · 597 阅读 · 0 评论 -
给定一个数组,判断这个数组的元素是否是在一个序列
转自出处Eg. {45,50,47,46,49,48}is a sequence 45, 46,47,48,49,50answer:1) find min and max2) set the min value at position 0, max to the last, others follow the pattern3) chec转载 2013-03-15 00:30:55 · 890 阅读 · 0 评论 -
找出在一个数组中出现n/2次的数
int main() { int a[] = {1 , 2 , 3, 1 }; int n = sizeof (a )/ sizeof(a[0]); int i; for ( i = 0; i < n; i++ ) { if ( a[i] == a[(i+1)%n ] || a[i] == a[(i+2)%n] )原创 2013-03-17 20:55:01 · 1354 阅读 · 0 评论 -
按层次交替打印二叉树
转自出处void ZigZag(struct node *root){ stack s1; stack s2; struct node *temp; /*Put the first node into stack*/ s1.push(root); while(1) {转载 2013-03-19 00:47:28 · 737 阅读 · 0 评论 -
查找BST中Kth小的元素
Node* findKthSmallNode(Node *pNode, int &Kth){ if (!pNode) return NULL; Node* pRetNode = NULL; pRetNode = findKthSmallNode(pNode->left, Kth); if (pRetNode != NULL) re原创 2013-03-19 00:15:39 · 800 阅读 · 0 评论 -
判断两个字符串是否anagrams
bool isAnagrams(char *S1, char *S2){ if ((S1 == NULL) && (S2 == NULL)) return true; if ((S1 == NULL) || (S2 == NULL)) return false; char *p1 = S1; char *p2 = S2; char HashMap[256] = {原创 2013-03-19 23:44:35 · 975 阅读 · 0 评论 -
排列数组,使得数组中的元素的concatenated值最大
#include #include #include #include using namespace std;void SortMax(int* arr, int len);bool StringCompare(string s1, string s2);string toString(int val);int main(){ int arr[5] = {4, 94,转载 2013-03-20 00:06:26 · 605 阅读 · 0 评论 -
找出二叉树中的最低公共父节点(LCA)
enum{ FOUND_NONE; FOUND_ONE; FOUND_BOTH;}FOUNDNode *FindLCA(Node *pRoot, Node *p1, Node *p2){ Node *pFound = NULL; findLCAImpl(pRoot, p1, p2, &pFound) return pFound;}FOUND find原创 2013-03-20 23:58:30 · 1279 阅读 · 0 评论