07 2015 档案

摘要:题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数。分析:可以利用二路归并排序算法对数组进行排序,并在排序过程中统计逆序对的数目。template void inversePairs ( vector & a, int & ... 阅读全文
posted @ 2015-07-30 10:14 Rosanne 阅读(215) 评论(0) 推荐(0)
摘要:改变目录和查看当前目录命令cd :进入用户主目录cd ~ :进入用户主目录cd - :返回进入此目录之前所在的目录cd .. :返回上级目录(若当前目录为“/“,则执行完后还在“/";".."为上级目录的意思)cd ../.. :返回上两级目录pwd:显示当前用户所在工作目录位置显示文件内容的命... 阅读全文
posted @ 2015-07-19 16:35 Rosanne 阅读(394) 评论(0) 推荐(0)
摘要:比较全局变量、全局静态变量、局部变量、局部静态变量的区别,他们在编译完后存储位置在什么地方、初始化值在什么地方、内存什么时候分配、赋初值对这些变量有哪些影响等。要弄清楚这些问题,首先要弄清楚下面几个知识点。C语言分下面几个存储区:1、栈区(stack)由编译器在需要的时候自动分配释放,在不需要的时候... 阅读全文
posted @ 2015-07-17 18:09 Rosanne 阅读(4334) 评论(0) 推荐(1)
摘要:切割(slicing)问题请看下面代码:class Window{public: ... std::string name()const; //返回窗口名称 virtual void display()const; //显示窗口和其内容};class WindowWithS... 阅读全文
posted @ 2015-07-17 16:45 Rosanne 阅读(169) 评论(0) 推荐(0)
摘要:假设有如下两个函数:int priority();void processWidget(std::tr1::shared_ptrpw, int priority);对processWidget的调用如下:processWidget(std::tr1::shared_ptrpw(new Widget... 阅读全文
posted @ 2015-07-17 16:11 Rosanne 阅读(177) 评论(0) 推荐(0)
摘要:auto_ptr是一个模板类,用于管理动态内存分配。请看下面的函数:void remodel (string& str){ string * ps = new string(str); ... str = *ps; return;}上述代码存在这样一个缺陷:没有收回函数中分配的内存。解决方法... 阅读全文
posted @ 2015-07-17 10:40 Rosanne 阅读(551) 评论(0) 推荐(0)
摘要:一.简单选择排序(不稳定) 1.基本思想:通过n-i次关键字间的比较,从n-i+1个记录中选出关键字最小的记录,并和第i个记录交换。 template <typename Comparable> void selectSort (vector<Comparable>&a) {//找出按从小到大排序应 阅读全文
posted @ 2015-07-15 17:46 Rosanne 阅读(215) 评论(0) 推荐(0)
摘要:归并算法具有稳定性 算法思想: 代码: 有稳定性 python版本代码 阅读全文
posted @ 2015-07-14 19:46 Rosanne 阅读(185) 评论(0) 推荐(0)
摘要:考虑如下代码:class Widget{public:...~Widget(){...}//假设这个可能吐出一个异常};void doSomething(){ std::vectorv; }//v在这里被销毁当vector v被销毁,它有责任销毁其内含的所有Widgets。假设v内含十个Wi... 阅读全文
posted @ 2015-07-14 12:18 Rosanne 阅读(236) 评论(0) 推荐(0)
摘要:一. 直接插入排序(稳定) 算法原理 将一个记录插入到已经排好序的有序表中,从而得到一个新的,长度增加1的有序表。 【每遍操作】 现将元素复制到0号位置(哨兵),再将本元素同已排序的序列,从尾开始比较。在已排序的序列中寻找自己的位置,进行插入;或者寻找不到,则一直进行到哨兵为止,即本元素最小,应放置 阅读全文
posted @ 2015-07-13 15:01 Rosanne 阅读(256) 评论(0) 推荐(0)
摘要:可用于实现多态公有继承的机制:在派生类中重新定义基类的方法。使用虚方法类Brass和类BrassPlus如下所示:class Brass{private:char fullName[MAX];long acctNum;double balance;public:virtual void WithDr... 阅读全文
posted @ 2015-07-12 23:33 Rosanne 阅读(275) 评论(0) 推荐(0)
摘要:读取未初始化的值会导致不明确的行为。在某些平台上,仅仅只是读取未初始化的值,就可能让你的程序终止运行。更可能的情况是读入一些“半随机”bits,污染了正在进行读取动作的那个对象,最终导致不可预知的程序行为,以及许多令人不愉快的调试过程。对于内置类型的对象手动初始化对于内置类型以外的任何其他东西,... 阅读全文
posted @ 2015-07-11 10:14 Rosanne 阅读(215) 评论(0) 推荐(0)
摘要:一、引入原因: 1、为了方便使用多态特性,我们常常需要在基类中定义虚拟函数。 2、在很多情况下,基类本身生成对象是不合情理的。例如,动物作为一个基类可以派生出老虎、孔雀等子类,但动物本身生成对象明显不合常理。 为了解决上述问题,引入了纯虚函数的概念,将函数定义为纯虚函数(方法:virtu... 阅读全文
posted @ 2015-07-10 17:29 Rosanne 阅读(210) 评论(0) 推荐(0)
摘要:全局变量与全局静态变量的区别: (a)若程序由一个源文件构成时,全局变量与全局静态变量没有区别。 (b)若程序由多个源文件构成时,全局变量与全局静态变量不同:全局静态变量使得该变量成为定义该变量的源文件所独享,即:全局静态变量对组成该程序的其它源文件是无效的。 (c)具有外部链接的静态;可以在... 阅读全文
posted @ 2015-07-10 17:26 Rosanne 阅读(390) 评论(0) 推荐(0)
摘要:多态的概念 通俗的说,是指用同一个名字定义不同的函数,这些函数执行不同的操作,即同样的接口实现不同的动作。 多态性分为编译时的多态性和运行时的多态性。 静态联编是指联编工作出现在程序的编译连接阶段。静态联编在程序编译阶段就知道调用函数的全部信息。其优点是速度快、效率高,缺点是缺乏灵活性。静态联... 阅读全文
posted @ 2015-07-10 17:24 Rosanne 阅读(826) 评论(0) 推荐(0)
摘要:通常我们都将构造函数的声明置于public区段,假如我们将其放入private区段中会发生什么样的后果?我们知道,当我们在程序中声明一个对象时,编译器调用构造函数(如果有的话),而这个调用将通常是外部的,也就是说它不属于class对象本身的调用,假如构造函数是私有的,由于在class外部不允许访问私... 阅读全文
posted @ 2015-07-10 17:22 Rosanne 阅读(684) 评论(0) 推荐(0)
摘要:typedef是一种在计算机编程语言中用来声明自定义数据类型,配合各种原有数据类型来达到简化编程的目的的类型定义关键字。#define是预处理指令。1. 首先,二者执行时间不同关键字typedef在编译阶段有效,由于是在编译阶段,因此typedef有类型检查的功能。Define则是宏定义,发生在预处... 阅读全文
posted @ 2015-07-10 17:17 Rosanne 阅读(437) 评论(0) 推荐(0)
摘要:一.内存分配 在C++中,内存分成5个区,分别是堆、栈、自由存储区、全局/静态存储区和常量存储区。 栈,在执行函数时,函数内局部变量的存储单元都可以在栈上创建,函数执行结束时这些存储单元自动被释放。栈内存分配运算内置于处理器的指令集中,效率很高,但是分配的内存容量有限。 堆,就是那些由new分... 阅读全文
posted @ 2015-07-10 17:09 Rosanne 阅读(181) 评论(0) 推荐(0)
摘要:问题描述:对于单参数的构造函数C++允许隐含的类型转换,容易破坏代码可读性,并导致难以发现的错误,通过关键字explicit修饰构造函数可以禁止单参数构造函数创建隐式临时变量。 阅读全文
posted @ 2015-07-10 17:05 Rosanne 阅读(386) 评论(0) 推荐(0)
摘要:三种数据类型的初始化1.static int a 的初始化const int a 的初始化static const int a的初始化三种初始化方式在类外初始化在构造函数中通过初始化列表初始化在声明的同时初始化一.static数据成员 静态成员:静态类中的成员加入static修饰符,即是静态成员.可... 阅读全文
posted @ 2015-07-10 16:59 Rosanne 阅读(824) 评论(0) 推荐(1)
摘要:一.一般形式返回类型 operator 操作符 (参数列表)二.成员函数or友元函数?大部分运算符重载函数既可以是成员函数,也可以使友元函数。使用友元函数的形式如下: friend 返回类型 operator 操作符 (参数列表) eg: 成员函数:Int operator + (... 阅读全文
posted @ 2015-07-10 16:47 Rosanne 阅读(225) 评论(0) 推荐(0)
摘要:几点原则:1.short至少为16位2.int至少与short一样长3.long至少为32位,且至少与int一样长64位系统中各数据类型所占的字节数:char:1字节bool:1字节short:2字节int:4字节long:4字节float:4字节double:8字节float和double不能用u... 阅读全文
posted @ 2015-07-10 16:42 Rosanne 阅读(165) 评论(0) 推荐(0)
摘要:C/C++浮点数在内存中的存储方式 任何数据在内存中都是以二进制的形式存储的,例如一个short型数据1156,其二进制表示形式为00000100 10000100。则在Intel CPU架构的系统中,存放方式为 10000100(低地址单元) 00000100(高地址单元),因为Intel CPU... 阅读全文
posted @ 2015-07-10 16:36 Rosanne 阅读(278) 评论(0) 推荐(0)
摘要:一、继承关系继承指的是一个类(称为子类、子接口)继承另外的一个类(称为父类、父接口)的功能,并可以增加它自己的新功能的能力。在UML类图设计中,继承用一条带空心三角箭头的实线表示,从子类指向父类,或者子接口指向父接口。二、实现关系实现指的是一个class类实现interface接口(可以是多个)的功... 阅读全文
posted @ 2015-07-10 16:26 Rosanne 阅读(198) 评论(0) 推荐(0)
摘要:程序经过编译后将变量名转换成变量的地址,对变量的存取都是通过地址进行的。一.指针与指针变量指针:一个变量的地址。指针就是地址指针变量:专门存放变量地址的变量二.指针的初始化1.可以用任意合法的指针值进行初始化2.如果定义指针变量时没有初始化,则系统将根据指针变量的类型选择是否自动初始化指针变量:全局... 阅读全文
posted @ 2015-07-10 16:17 Rosanne 阅读(609) 评论(0) 推荐(0)
摘要:一.多继承机制存在哪些问题,怎么解决这些问题?——歧义性:相同名称的成员在内存中同时拥有多个拷贝,当通过派生类对象使用这些成员时,就会产生歧义性。作用域操作符虽然能解决歧义性问题,但并没有解决多个拷贝的问题。类D 的内存布局使用虚拟机制注意事项:1.若在虚基类中定义了带参数的构造函数,而没有定义默认... 阅读全文
posted @ 2015-07-10 15:51 Rosanne 阅读(998) 评论(0) 推荐(0)
摘要:1.C++中的空类默认产生以下四个函数: 默认构造函数:A() 拷贝构造函数:A(const A&) 赋值函数:A&operator = (const A&) 析构函数 struct也可以有构造函数、析构函数、继承等,与class的唯一区别是默认的访问控制权限 2.默认构造函数 如果没有显示定义构造 阅读全文
posted @ 2015-07-09 21:57 Rosanne 阅读(1327) 评论(0) 推荐(0)
摘要:指针与引用的差别:1.非空区别。在任何情况下,都不能使用指向空值的引用。2.合法性区别。在使用引用之前不需要测试它的合法性,指针则应该总是被测试,防止其为空。3.可修改区别。指针可以被重新赋值以指向另一个不同的对象,而引用则只能指向初始化时被指定的对象。4.可计算区别。指针可以进行加减运算,引用则不... 阅读全文
posted @ 2015-07-09 21:35 Rosanne 阅读(208) 评论(0) 推荐(0)
摘要:为了能使CPU对变量进行高效快速的访问,变量的起始地址应该具有某些特性,即所谓的“对齐”。例如对于4字节的int类型变量,其起始地址应位于4字节边界上,即起始地址能够被4整除。变量的对齐规则如下(32位系统):char在字节边界上对齐short (16-bit)在双字节边界上对齐int and lo... 阅读全文
posted @ 2015-07-09 18:41 Rosanne 阅读(739) 评论(0) 推荐(0)
摘要:一.const的用途1.定义const常量2.可以修饰函数的形参,返回值,以及函数体。被const修饰的内容可以受到强制保护,防止被意外修改,提高程序健壮性。const 返回值 函数返回值为 const 只有用在函数返回为引用的情况。 函数返回值引用常量表示不能将函数调用表达式作为左值使用。例... 阅读全文
posted @ 2015-07-09 18:33 Rosanne 阅读(342) 评论(0) 推荐(0)
摘要:内联函数与宏的区别:内联函数与普通函数相比,可以加快程序的运行速度,因为不需要中断调用,在编译的时候内联函数可以直接镶嵌到目标代码中。而宏只是简单的字符替换。内联函数要做参数类型检查,这是内联函数跟宏相比的优势。inline一般只用于如下情况: (1)一个函数不断被重复调用 (2)函数只有简单的... 阅读全文
posted @ 2015-07-09 18:00 Rosanne 阅读(2170) 评论(0) 推荐(0)
摘要:一.利用stringstream类1. 字符串到整数 stringstream sstr(str); int x; sstr >> x;(即从sstr中提取数据)2. 整数到字符串 stringstream sstr; int x; sstr 阅读全文
posted @ 2015-07-09 17:34 Rosanne 阅读(68251) 评论(0) 推荐(1)
摘要:两者的效率比较:当比较次数较少时,效率一样;当比较次数较多时,发现ifelse的速度更快,应该是其汇编指令更少的原因。if else的汇编代码如下:三目运算符代码如下: 阅读全文
posted @ 2015-07-09 17:19 Rosanne 阅读(3758) 评论(0) 推荐(0)
摘要:题目:输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的双向链表。要求不能创建任何新的结点,只能调整树中结点的方向。如下图所示:二叉树的结点定义如下:1 struct BinaryTreeNode2 {3 int m_nValue;4 BinaryTreeNode* m_pLeft;... 阅读全文
posted @ 2015-07-09 16:20 Rosanne 阅读(249) 评论(0) 推荐(0)
摘要:题目:请实现ComplexListNode*clone(ComplexListNode*pHead),复制一个复杂链表。在复杂链表中,每个结点除了有一个m_pNext指针指向下一个结点外,还有一个m_pSibling指向链表中任意一个节点。结点定义如下:1 struct ComplexListNod... 阅读全文
posted @ 2015-07-08 21:04 Rosanne 阅读(931) 评论(1) 推荐(0)
摘要:题目:在字符串中找出第一个只出现一次的字符。如“abaccdeff”,则输出‘b'。解法一:暴力搜索,时间复杂度为O(N2)解法二:利用hash表,时间复杂度为O(N),空间复杂度为O(N) 1 char firstNotRepeatChar(string&str) 2 { 3 if (st... 阅读全文
posted @ 2015-07-08 12:32 Rosanne 阅读(225) 评论(0) 推荐(0)
摘要:题目:0,1,...,n-1这n个数字排成一个圆圈,从数字0开始每次从这个圆圈里删除第m个数字。求出这个圆圈里剩下的最后一个数字。 例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前四个数字一次是2、0、4、1,最后剩下的数字为3. 本题是有名的约瑟夫环问题。 阅读全文
posted @ 2015-07-08 11:06 Rosanne 阅读(303) 评论(0) 推荐(0)
摘要:格式:strlen(字符数组名)功能:计算字符串S的长度,不包括‘\0'在内char aa[10]="jun"; cout<<strlen(aa)<<endl; //结果为3char aa[5]="hello";cout<<strlen(aa)<<endl; //结果为不定值sizeof()返回的是... 阅读全文
posted @ 2015-07-07 18:51 Rosanne 阅读(216) 评论(0) 推荐(0)
摘要:题目:求1+2+...+n,要求不能使用乘除法、for、while、if、else、swithc、case等关键字及条件判断语句(A?B:C)。解法一:利用构造函数求解 1 class Temp 2 { 3 public: 4 Temp() 5 { 6 ... 阅读全文
posted @ 2015-07-07 16:26 Rosanne 阅读(196) 评论(0) 推荐(0)
摘要:题目:从扑克牌中随机抽取5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大王小王可以看成任意数字。分析:我们用0来表示大王和小王。判断5个数字是否是连续的有如下三步:1. 将数组排序2. 统计数组中0的个数3. 统计排序之后的数组中相邻... 阅读全文
posted @ 2015-07-07 16:09 Rosanne 阅读(262) 评论(0) 推荐(0)
摘要:题目一:输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变。为简单起见,标点符号和普通字母一样处理。例如输入字符串“I am a student.",则输出"student. a am I"。解法一:利用字符串流分割单词1 void reverseWords(string &s) {2 ... 阅读全文
posted @ 2015-07-07 15:23 Rosanne 阅读(206) 评论(0) 推荐(0)
摘要:题目一:输入一个递增排序的数组和一个数字s,在数组中查找两个数,使得它们的和正好是s。如果有多对数字的和为s,输出任意一对即可。 1 vector findNumberwWithSum(vector&data, int sum) 2 { 3 int n = data.size(); 4 ... 阅读全文
posted @ 2015-07-07 10:48 Rosanne 阅读(235) 评论(0) 推荐(0)
摘要:题目:一个整形数组里除了两个数字之外,其他的数字都出现了两次。找出这两个只出现一次的数字。要求时间复杂度为O(N),空间复杂度为O(1)。分析:利用异或运算可以求出一个整形数组里唯一一个只出现一次的数字。因此,如果能将本题的数组分成两个部分,使得每个部分只包含一个只出现一次的数字,便可以求得本题的解... 阅读全文
posted @ 2015-07-06 17:29 Rosanne 阅读(216) 评论(0) 推荐(0)
摘要:题目一:输入一棵二叉树的根节点,求该树的深度。从根节点到叶节点一次经过的节点形成树的一条路径,最长路径的长度为树的深度。二叉树的节点定义如下:struct TreeNode{ int val; TreeNode* left; TreeNode* right;};例如,下图中二... 阅读全文
posted @ 2015-07-06 17:06 Rosanne 阅读(236) 评论(0) 推荐(0)
摘要:题目:统计一个数字在排序数组中出现的次数。解法:二分查找,算法复杂度为O(logN). 1 int getFirstIndexOfK(vector&data, int k) 2 { 3 int n = data.size(); 4 if (n == 0) 5 ret... 阅读全文
posted @ 2015-07-06 16:46 Rosanne 阅读(172) 评论(0) 推荐(0)
摘要:题目:我们把只包含因子2、3和5的数称作丑数。求从小到大的顺序的第1500个丑数。例如6和8是丑数,但14不是。习惯上我们把1当做第一个丑数。解法:创建数组保存已经找到的丑数,用空间换时间创建一个数组,里面的数字是排好序的丑数,每一个丑数都是前面的丑数乘以2、3或者5得到的。 1 int getUg... 阅读全文
posted @ 2015-07-05 20:04 Rosanne 阅读(259) 评论(0) 推荐(0)
摘要:参见LeetCode-Intersection of Two Linked Lists。 阅读全文
posted @ 2015-07-05 16:37 Rosanne 阅读(148) 评论(0) 推荐(0)
摘要:题目:输入一个正整数数组,把数组里所有数字拼接起来排成一个数,打印能拼接出的所有数字中最小的一个。例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323.参见LeetCode-Largest Number。 阅读全文
posted @ 2015-07-05 16:17 Rosanne 阅读(211) 评论(0) 推荐(0)
摘要:题目:输入一个整型数组,数组里有正数也有负数。数组中一个或多个整数组成一个子数组。求所有子数组的和的最大值。要求时间复杂度为O(N)。参见LeetCode-Maximum Subarray。 阅读全文
posted @ 2015-07-05 16:09 Rosanne 阅读(144) 评论(0) 推荐(0)
摘要:题目:输入n个整数,找出其中最小的k个数。例如输入4、5、1、6、2、7、3、8这8个数字,则最小的4个数字是1、2、3、4。解法一:O(N)的算法,只有当可以修改输入的数组时可以用参考面试题29“数组中出现次数超过一半的数字”,同样用partition函数来解决这个问题。如果partition函数... 阅读全文
posted @ 2015-07-05 10:38 Rosanne 阅读(274) 评论(0) 推荐(0)
摘要:题目:数组中有一个数字的次数超过数组长度的一半,请找出这个数字。解法一:基于Partition函数的O(N)算法 1 int partition(vector&num, int low, int high) 2 { 3 int pivot = num[low]; 4 while (l... 阅读全文
posted @ 2015-07-04 20:32 Rosanne 阅读(201) 评论(0) 推荐(0)
摘要:题目:输入一棵二叉树和一个整数,打印出二叉树中结点值的和为输入整数的所有路径。从树的根结点开始往下一直到叶结点所经过的结点形成一条路径。参见Leetcode-Path Sum II。 阅读全文
posted @ 2015-07-04 17:41 Rosanne 阅读(160) 评论(0) 推荐(0)
摘要:Description:Given a binary tree and a sum, find all root-to-leaf paths where each path's sum equals the given sum.For example:Given the below binary t... 阅读全文
posted @ 2015-07-04 17:35 Rosanne 阅读(186) 评论(0) 推荐(0)
摘要:题目:输入一个字符串,打印出该字符串中字符的所有排列。例如输入字符串abc,则打印出由字符a、b、c所能排列出来的所有字符串abc、acb、bac、bca、cab和cba。参见LeetCode-Permutations。本题扩展:如果不是求字符的所有排列,而是求字符的所有组合,应该怎么办?还是输入三... 阅读全文
posted @ 2015-07-03 15:52 Rosanne 阅读(231) 评论(0) 推荐(0)
摘要:题目:输入一个整数数组,判断该数组是不是某二叉搜索树的后序遍历的结果。假设输入的数组的任意两个数字都互不相同。 1 bool isPostOrder(vector&num, int left, int right) 2 { 3 if (left == right) 4 ret... 阅读全文
posted @ 2015-07-03 15:32 Rosanne 阅读(165) 评论(0) 推荐(0)
摘要:题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印。例如: 3 / \ 9 20 / \ 15 7 输出:3、9、20、15、7这道题跟leetcode中的按层序打印有所不同,leetcode中要求每一层输出为一行,而本题中没有此要求,因此简单的多。... 阅读全文
posted @ 2015-07-03 14:55 Rosanne 阅读(194) 评论(0) 推荐(0)
摘要:题目:输入两个整数序列,第一个序列表示栈的压入顺序,判断第二个序列表示是否为该栈的弹出顺序。 1 bool isPopOrder (vector&push, vector&pop) 2 { 3 int n = push.size(); 4 if ( n == 0 || n!=pop.... 阅读全文
posted @ 2015-07-03 14:40 Rosanne 阅读(176) 评论(0) 推荐(0)
摘要:题目:输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字。例如:如果输入以下矩阵:1 2 3 45 6 7 89 10 11 1213 14 15 16则依次打印出数字1、2、3、4、5、6、7、8、9、10、11、12、13、14、15、16 1 void pri... 阅读全文
posted @ 2015-07-03 10:54 Rosanne 阅读(201) 评论(0) 推荐(0)
摘要:题目:输入两棵二叉树A和B,判断B是不是A的子结构。二叉树结点的定义如下:struct BinaryTreeNode{ int val; BinaryTreeNode* left; BinaryTreeNode* right;};例如下图中的两棵树,由于A中有一部分树的... 阅读全文
posted @ 2015-07-02 15:57 Rosanne 阅读(193) 评论(0) 推荐(0)
摘要:题目:输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然时按照递增排序的。链表结点定义如下:struct ListNode{ int val; ListNode* next;};参见LeetNode-Merge Two Sorted Lists。 阅读全文
posted @ 2015-07-02 15:25 Rosanne 阅读(174) 评论(0) 推荐(0)
摘要:题目:定义一个函数,输入一个链表的头结点,反转该链表并输出反转后链表的头结点。链表结点定义如下:1 struct ListNode2 {3 int val;4 ListNode* next; 5 };参见LeetNode-Reverse Linked List。 阅读全文
posted @ 2015-07-02 15:14 Rosanne 阅读(139) 评论(0) 推荐(0)
摘要:题目:输入一个链表,输出该链表中倒数第k个结点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾结点是倒数第1个结点。例如一个链表有6个结点,从头结点开始它们的值一次是1、2、3、4、5、6.这个链表的倒数第3个结点是值为4的结点。链表结点定义如下:struct ListNode{ i... 阅读全文
posted @ 2015-07-02 15:08 Rosanne 阅读(203) 评论(0) 推荐(0)
摘要:题目:输入一个整数数组,实现一个函数来调整该数组中数字的顺序,是的所有奇数位于数组的前半部分,所有偶数位于数组的后半部分。初级程序员代码: 1 void reorderOddEven(vector&data) 2 { 3 unsigned int n = data.size(); 4 ... 阅读全文
posted @ 2015-07-01 17:33 Rosanne 阅读(211) 评论(0) 推荐(0)
摘要:题目:给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点与函数的定义如下:1 struct ListNode2 {3 int val;4 ListNode* next;5 };分析:如下图所示,假设要删除的结点为p结点,若直接删除p结点,则必须知道p的上一个结... 阅读全文
posted @ 2015-07-01 16:49 Rosanne 阅读(243) 评论(0) 推荐(0)
摘要:题目:输入数字n,按顺序打印出从1最大的n位十进制数。比如输入3,则打印出1、2、3一直到最大的3位数即999。考点:大数问题。解决方案:在字符串上模拟数字加法。《剑指Offer》上的代码太复杂,我自己的代码如下所示: void increment(string&str) { int n = ... 阅读全文
posted @ 2015-07-01 11:15 Rosanne 阅读(181) 评论(0) 推荐(0)
摘要:题目:实现函数double Power(double Power(double base, int exponent),求base的exponent次方。不得使用库函数,同时不需要考虑大数问题。解法一:全面但不够高效的解法需要注意的地方:指数为负数的情况。底数为0且指数为负数的情况。(无效输入)底数... 阅读全文
posted @ 2015-07-01 10:39 Rosanne 阅读(197) 评论(0) 推荐(0)
摘要:题目:写一个函数,输入n,求斐波那契数列的第n项。斐波那契数列的定义如下:解法一:动态规划 1 int fibonacci (int n) 2 { 3 if (n<=1) 4 return n; 5 int p = 0, q = 1, result = 0; 6 ... 阅读全文
posted @ 2015-07-01 09:47 Rosanne 阅读(236) 评论(0) 推荐(0)