C++
scgillian
这个作者很懒,什么都没留下…
展开
-
project Euler上的一些问题
随便做了几题,还是project first,有空再来做Number spiral diagonals问题21 22 23 24 2520 7 8 9 1019 6 1 2 1118 5 4 3 1217 16 15 14 13计算对角线的数字之和看到对角线数值变化是1+(3+5+7+9)+(13+17+21+25)+(31原创 2013-07-01 21:41:02 · 907 阅读 · 0 评论 -
编程珠玑第9章二分搜索(有重复数字)中查找某数出现的第一个位置
binary search:search the first occurence of a number 查找的数中有重复的数只需在原始的二分搜索基础上进行修改,当中间的数A[mid]与target值相同时,target值的第一次出现要么是在mid处,要么是在mid左边。若low与mid(low==mid)的闭区间只包含一个数,则返回值为mid,若low具体实现如下#inc原创 2013-08-21 09:49:10 · 1721 阅读 · 0 评论 -
100题15输入一颗二元查找树,把该树转化为它的镜像
即在转化后的二元查找树中,左子树的结点都大于右子树的结点 迭代算法可以用栈来实现,可以把结点的左右子树的根都压入栈。印象中关于树的很多题目的非递归实现均可以用stack来实现定义一个swap函数交换树的左右子节点void swap(Node *l,Node *r){Node *temp=l;l=r;r=temp;}void mirror(Node *root)原创 2013-08-21 19:51:47 · 574 阅读 · 0 评论 -
100题求一个矩阵中最大的二维矩阵(元素和最大)
题目本质上是求使得A[i][j]+A[i][j+1]+A[i+1][j]+A[i+1][j+1]最大的i,j值为了减少计算量,可以先把相邻两行对应列的数先加起来存储到一个本地数组sub上,这样二维问题便递减到一维上,sub上求最大的和即可#includeusing namespace std;templateint max_sum(int (&A)[m][n],in原创 2013-08-21 15:05:25 · 961 阅读 · 0 评论 -
careercup5.5求解转换两数所需修改的位数
Write a function to determine the number of bits required to convert integer A to integer B.Input: 31, 14Output: 2首先利用xor异或运算算出两数不同的位数,假设输入的两数为a,b,X=a^b,X中含有的1的位数即为要求的值为了求出X中1的位数,可以每次把X与原创 2013-05-10 15:16:49 · 640 阅读 · 0 评论 -
poj1952
开始一直超时,后来发现第二层for循环写错了,下标是j--,结果写成i--了,硬是没看出来。这一题求的最长递减子序列,算是个dp的问题。但是有个陷阱,就是可能有相同的数字比如数字序列 8 7 6 7 5,最长的递减子序列为(8,7,5),(8,7,6),比如(8,7,5)出现了两次只能算一次,不能重复计算可以通过如下语句排除相同的序列else if(arr[i]==arr[j]){原创 2013-05-17 22:06:30 · 1007 阅读 · 0 评论 -
careercup8.4写出字符串的所有排列
8.4Write a method to compute all permutations of a string这题有需要注意的点在:这个字符串中可能有重复字符,因此需剔除重复排列用的递归的思想,首先第一次可以选择字符串中的任意一个字符,剔除重复的,char_set用于保存当前位可能出现的字符。flag用于控制是否出现重复字符循环中这一句prev_str=prev_str原创 2013-04-12 21:24:23 · 692 阅读 · 0 评论 -
careercup5.1
You are given two 32-bit numbers, N and M, and two bit positions, i and j. Write a method to set all bits between i and j in N equal to M (e.g., M becomes a substring of N located at i and starting at原创 2013-05-02 15:10:11 · 632 阅读 · 0 评论 -
careercup2.4
careercup2.4You have two numbers represented by a linked list, where each node contains a single digit. The digits are stored in reverse order, such that the 1’s digit is at the head of the list. Wr原创 2013-04-27 21:17:09 · 568 阅读 · 0 评论 -
careercup3.5用两个栈实现一个队列
3.5 Implement a MyQueue class which implements a queue using two stacks.分析Queue:first in first outstack:first in last out由于队列移除元素移除的是队尾元素,因此用栈s2保持队尾元素。两个栈栈s1中:最新的元素在最上面栈s2中:最旧的元素在最原创 2013-04-19 21:28:49 · 564 阅读 · 0 评论 -
carrercup 2.5检测链表中的环的位置
Given a circular linked list, implement an algorithm which returns node at the beginning of the loop.DEFINITIONCircular linked list: A (corrupt) linked list in which a node’s next pointer points t原创 2013-04-25 19:27:27 · 918 阅读 · 0 评论 -
carrercup9.3
Given a sorted array of n integers that has been rotated an unknown number of times, give an O(log n) algorithm that finds an element in the array. You may assume that the array was originally sorted原创 2013-04-16 21:58:14 · 566 阅读 · 0 评论 -
careercup1.7
1.7 Write an algorithm such that if an element in an MxN matrix is 0, its entire row and column is set to 0.写一个算法加入M*N矩阵中有一个元素为0,那么该元素对应的行和列的所有元素均设为0分析:如果直接循环二维数组,当该数组元素为0时,把对应的行和列的元素均设为0.这样有可能会遇到原创 2013-04-22 21:15:39 · 628 阅读 · 0 评论 -
树的子结构
题目来自http://zhedahht.blog.163.com/blog/static/25411174201011445550396/题目:二叉树的结点定义如下:struct TreeNode{ int m_nValue; TreeNode* m_pLeft; TreeNode* m_pRight;};输入两棵二原创 2013-09-06 15:15:12 · 656 阅读 · 0 评论 -
求二叉树的深度递归与非递归版
当只有一个节点时,二叉树的深度为1,这与求二叉树的高度略微有点不同。#includeusing namespace std;struct TreeNode { int val; TreeNode *left; TreeNode *right; TreeNode(int x) : val(x), left(NULL), right(NULL)原创 2013-09-09 11:01:23 · 7237 阅读 · 1 评论 -
判断二叉树是不是平衡
题目来自http://zhedahht.blog.163.com/blog/#m=0题目:输入一棵二叉树的根结点,判断该树是不是平衡二叉树。如果某二叉树中任意结点的左右子树的深度相差不超过1,那么它就是一棵平衡二叉树。例如下图中的二叉树就是一棵平衡二叉树:递归算法,考虑根节点是否平衡,考虑根节点的左子树是否平衡,考虑根节点的右子树是否平衡。case1:根节点原创 2013-09-09 12:42:51 · 939 阅读 · 0 评论 -
C++左移右移
做一些简单的记录吧,很久没写代码的后果是很多都忘了 #includeusing namespace std;int main(){ int i=5; int j=8; cout>1)<<" "<<(i<<1)<<endl; //输出2 10 cout>1)<<" "<<(j<<1)<<endl; //输出4 16 // >>1为左移,<<原创 2012-02-23 22:17:53 · 3119 阅读 · 3 评论 -
C++问题集锦
慢慢积累吧。。问题1C++二维数组如何做参数参考自stackoverflow,假设函数类型为voidtemplatevoid func(int (&arr)[N][M]){ //函数具体内容}int arr[2][3]= { 1,2,3,4,5,6 }; func(arr);问题2:如何读取二进制文件原创 2013-04-22 21:32:01 · 1709 阅读 · 0 评论 -
给定一个数字m和数字n,输出相应的所有排列
#include#includeusing namespace std;//int *a=new int[m];void combination(int m,int n,string str){if(m==0){coutcoutreturn;}for(int i=n;i>=m;i--){//coutchar buf[10];sprin原创 2013-10-11 23:14:51 · 3319 阅读 · 0 评论 -
C++中的一些概念
摘自C++ primerC++拷贝构造函数,参数是该类类型本身的引用,通常是const类型的引用The constructor that takes a single parameter that is a (usually const ) reference to an object ofthe class type itself is called the原创 2013-09-09 20:50:36 · 910 阅读 · 0 评论 -
C++ interview questions面试问题
问题1 :from http://www.careercup.com/question?id=17227667What will be the value of the variable 'var1' in class A? 答案da) 6 b)7 c) 5 d) undefined分析:调用子类的构造函数时,(1)会先调用父类构造函数构造父类成员部分,可见下原创 2013-09-09 14:00:03 · 1209 阅读 · 0 评论 -
C++虚基类(virtual base class)
参考http://www.learncpp.com/cpp-tutorial/118-virtual-base-classes/#includeusing namespace std;class Base{public: Base() { cout<<"Base constructor"<<endl; }};class A:public Base{public: A原创 2013-10-02 12:54:35 · 8729 阅读 · 0 评论 -
螺旋数组
螺旋数组最直观的方法是模拟这个顺时针转圈的过程设数组维数为m假设需要转m圈才可以覆盖整个shuzu第一圈的元素个数为4*dim-4=4*(dim-1)第二圈的元素个数为4*(dim-3)即dim*dim=4*(dim-1)+4*(dim-3)+...4*(dim-(2*m-1))即4*(m*dim-m*m)=dim*dim(dim-2m)^2=0m=dim/2原创 2013-10-01 11:51:16 · 4925 阅读 · 0 评论 -
二叉树前序遍历,中序遍历非递归版本
前序遍历:用栈来存储节点,因为前序遍历是先左子树->根节点->右子树。因此先沿着根节点找最左边的节点,依次压栈,出栈的时候,因为栈这时没有节点的右子树信息。若某个节点存在右子树,则压入右子树中的节点。先压入右子树的根节点。在该右子树上,对右子树根节点到右子树最左边节点的路径上的节点依次压栈#include#includeusing namespace std;struct node{原创 2013-09-10 19:03:50 · 763 阅读 · 0 评论 -
C++友元
有些情形下,需要允许类的非成员函数访问类的私有成员,同时阻止一般的访问。友元便是在这样的背景下引入。友元可以是普通的非成员函数,或在该类之前定义的其他类的成员函数,或整个类。#includeusing namespace std;class B;class A{public: int test(B b);private: int x;};class B{ f原创 2013-09-13 15:15:50 · 710 阅读 · 0 评论 -
翻转句子中单词的顺序
题目:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。句子中单词以空格符隔开。为简单起见,标点符号和普通字母一样处理。例如输入“I am a student.”,则输出“student. a am I”。字符串的操作使用C++的容器类比如vector或者stack,读到空格时便压入容器,然后读出的时候从容器末端往容器开头读即可。可以用reverse_iterat原创 2013-09-05 10:43:34 · 1559 阅读 · 0 评论 -
二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果。如果是返回true,否则返回false。例如输入5、7、6、9、11、10、8,返回的是true二元查找树后序遍历的特征是,数组中最后一个数是树的跟,该序列前面的数为左子数部分的节点,后面的数为右子树节点。递归判断左子树部分是否为二元查找树,右子树部分是否为二元查找树若不存在左子树,则只需考虑右子原创 2013-09-05 13:46:47 · 865 阅读 · 0 评论 -
数对之差的最大值
题目:在数组中,数字减去它右边的数字得到一个数对之差。求所有数对之差的最大值。例如在数组{2, 4, 1, 16, 7, 5, 11, 9}中,数对之差的最大值是11,是16减去5的结果考虑一个简单的情形:当数组只有两个数a[0],a[1]的时候,最大值当然是a[0]-a[1]了当数组规模增大时,我们从数组末尾元素开始考虑,从数组元素右边的元素个数从1,2,3依次增加到size原创 2013-09-04 16:58:30 · 832 阅读 · 0 评论 -
careercup top 150判断字符串中字符是否唯一(字符不重复)
Implement an algorithm to determine if a string has all unique characters. What if you can not use additional data structures选自careercup top 150 questions 1.1#include#includeusing namespac原创 2013-04-12 19:17:59 · 912 阅读 · 0 评论 -
编程之美4.3买票找零
解法二的笔记:存在某个k,使序列前k项中1的个数比0的个数刚好小1?假设不存在这样的k,那么由于是非法序列那么k=2n-1时,1的个数至少比0小于2,这样无论第2n个数取0还是取1,0和1的总个数均不会相等,所以假设不成立。必存在k使序列前k项中1的个数比0的个数刚好小1原创 2012-12-31 17:16:43 · 1251 阅读 · 0 评论 -
编程之美4.4点是否在三角形内扩展问题
不包括点在边线上的情况,判断点是否在三角形内,仍然用面积法进行判断边线上的情形用向量平行的判定条件设向量AB(x1,y1),向量AD(x2,y2)若x1y2-x2y1==0则这两向量平行,表面D要么在边线上要么在三角形外均属于不在三角形内的情形其余的判定为点D与三边围成的面积之和是否等于三角形ABC的面积三角形的面积用海伦公式计算#include#include原创 2012-12-30 20:00:04 · 1660 阅读 · 0 评论 -
MPI矩阵与向量乘法
并行矩阵与向量乘法,为简单起见,这里假设矩阵为n维方阵,向量为n维。进程数为矩阵的维数。按行卷帘存储。这里设n为3。每个进程存储矩阵的一行及向量的一个元素。#include#include "mpi.h"int main(int argc ,char ** argv){ MPI_Init(&argc,&argv); int np,rank; MPI_Status s原创 2012-03-22 09:50:44 · 7299 阅读 · 1 评论 -
C++构造函数初始化列表
c++ primer买了好久没怎么看,以前写类的时候很少用这个构造函数初始化列表,基本是使用的构造函数体内赋值的形式。还是得多看书,多实践#includeusing namespace std;class A{public: A(int i):num(i){};private: int num;};//类的所有成员变量都必须在构造函数中初始化class原创 2012-04-08 12:41:24 · 440 阅读 · 0 评论 -
hdu1024
主要参考这篇文章http://hi.baidu.com/eizi/blog/item/3c12270987a4ad38e9248880.html 搞了一上午,本来不想弄了。发现最近太急,很难静下心来。 状态转移方程设输入的数组为A[1...n],从中找出m个段,使者几个段的和为最大B[i][j]表示前j个数中取i个段的和的最大值,其中最后一个段包含A[j]。最后的解转载 2012-04-03 14:23:30 · 2762 阅读 · 0 评论 -
百度面试题:判断两棵树是否相等
请实现两棵树是否相等的比较,相等返回1,否则返回其他值,并说明算法复杂度。数据结构为:typedef struct_TreeNode{char c;TreeNode *leftchild;TreeNode *rightchild;}TreeNode;函数接口为:int CompTree(TreeNode* tree1,TreeNode* tree2);注:A、B两棵原创 2012-03-09 23:23:15 · 3049 阅读 · 0 评论 -
char *与char[]的一点感悟
char *str[n]定义了一个字符指针数组str,即str数组的每个元素都是char *类型(指向字符的指针),指向一个char在内存中的地址。系统为它分配n个sizeof(int)长度的空间char *A[]={"I","love","china"};定义了一个字符指针数组A,即A数组的每个元素都是一个指针,每个指针指向一个char地址。sizeof(A)分配了3个sizeof(原创 2012-03-03 13:35:42 · 626 阅读 · 0 评论 -
编程之美2.10扩展问题求数组中第二大数
要求求得数组中第二大数采用分治思想解决这个问题 #includeusing namespace std;//分治思想求数组中第二大的数//low为数组低位索引,high为数组高位索引void search(int *a,int low,int high,int *max,int *smax){ //max为最大的数,smax为数组中第二大的数 if(high-lo原创 2012-02-29 18:13:03 · 2851 阅读 · 2 评论 -
C++ primer习题3.14
读入一段文本到vector对象,每个单词存储为vector的一个元素。把vector对象中每个单词转化为大写字母。输出vector对象中转化后的元素,每八个单词为一行输出 代码如下:本代码未考虑标点符号的因素,代码认为每个单词之间都有空格隔开。 #include#include#include#includeusing namespace std;int mai原创 2012-02-25 18:52:05 · 888 阅读 · 1 评论 -
C++引用与指针
指针(pointer)说白了就是保存的另一个对象在内存中分配的地址,就是内存中的地址。而引用(reference)相当于是变量的别名,定义的引用在内存中应该没有分配地址。比如int i=10;int &j=i; cout指针变量本身在内存中时分配了空间的,它保存的是该指针指向对象在内存中的地址。比如int i=10;int *p=&i;此时p指向的是变量i,cout #incl原创 2012-02-25 16:56:29 · 524 阅读 · 0 评论 -
编程之美2.21
题目: 写一个程序,输出它所有可能的连续自然数之和的算式 分析:假设可以写成连续i个自然数之和,假设这个序列第一个自然数为j,即为j , j+1,j+2,j+3...j+i-1,这个序列为等差数列,和为i[(i-1)/2+j]即数n要表示成i[(i-1)/2+j]的形式。首先要判断(n-i*(i-1)/2)%i==0,i*(i-1)/2肯定可以整除,因为i至少为2,i*(i-1)/2用原创 2012-02-24 13:16:58 · 2167 阅读 · 0 评论