- 博客(16)
- 收藏
- 关注
原创 《剑指offer》——寻找链表中倒数第k个结点
struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL){} }; ListNode* FindKthToTail(ListNode* pListHead, unsigned int k) { if(pListHead == NULL || k <
2015-12-29 19:07:35 296
原创 《剑指offer》——任意两个整数相加(乘)
#include using namespace std; //正整数相加 char *plus(char *a,char *b) { int len_a = strlen(a); int len_b = strlen(b); int len_sum; if(len_a < len_b) len_sum = len_b; else
2015-12-25 15:47:53 742
原创 《剑指offer》——打印1到最大的n位数
#include using namespace std; bool inc(char *num) { //累加结束标志,初始为false //只有当下标为0的位置上产生进位时,才能表明打印结束 bool flag = false; int len = strlen(num); int c = 0;//进位标志 for(int i = len -
2015-12-22 20:16:34 345
原创 《剑指offer》——数值的整数次方
不考虑大数问题,double Power(double base, int exponent) { //如果底数为0,且幂方为负数 //注意浮点型判定相等不能直接使用== if(base - 0.0 > -0.0000001 && base - 0.0 < 0.0000001 && exponent < 0) return 0;
2015-12-22 20:14:48 339
原创 《剑指offer》——用两个栈实现队列
题目: 用两个栈实现队列。分析与解法: 使用两个栈stack1和stack2。 假设入栈时使用stack1; 则出栈时使用stack2,若stack2中没有元素,则将stack1中的元素依次出栈,并在stack2依次入栈,再使stack2中的元素出栈,则stack1中先入栈的元素先出栈;若出栈时stack2中有元素,则直接出栈。 如图所示, 代码如下,class Solution { publ
2015-12-17 19:07:04 314
原创 《剑指offer》——从尾到头打印链表
从尾到头打印头节点可以借助栈来实现。递归的本质是一个栈结构,又可以使用递归的方法来实现。typedef struct Node { int data; struct Node *next; }Node, *LinkList;//栈 void reversePrint(LinkList &L) { if(L -> next == NULL) return;
2015-12-15 19:32:10 255
原创 《剑指offer》——替换空格
题目: 请实现一个函数,把字符串中的每个空格替换成“%20”。例如输入“We are happy. ”,则输出“We%20are%20happy.”。分析与解法: void replaceSpace(char *str, int length) { if(str == NULL || length <= 0) return; int num = 0;//空格数
2015-12-14 19:40:22 410
原创 《剑指offer》——二维数组中的查找
在行列递增的二维数组中查找数字7的方法如图所示, 根据上图步骤编写代码如下,int Find(int *matrix, //待查数组 int row,//行数 int col,//列数 int num)//待查数字 { int i = col - 1; int j = 0; while(j < row && i >=
2015-12-11 19:49:22 255
原创 《剑指offer》——重载赋值运算符函数
class CMyString { public: CMyString(char* pData = NULL); CMyString(const CMyString& str); ~CMyString(); private: char* m_pData; };//为了可以连续赋值,返回值类型应为对象的引用 //参数应为c
2015-12-10 20:48:40 424
原创 《剑指offer》——字符串转换为整数
#include<iostream> using namespace std;int strToInt(const char* str) { int num = 0; int t = 1; while(*str != 0)//字符串结束 { if(*str < '0' || *str > '9')//若元素不是数字字符 {
2015-12-09 16:39:43 400
原创 《疯狂JAVA讲义》——Singleton类
如果一个类始终只能创建一个实例,则这个类被称为单例(Singleton)类。class Singleton { //使用一个变量来缓存曾经创建的实例,因为该变量需要被静态方法访问 //所以使用static修饰 private static Singleton instance; //对构造器使用private修饰,对外隐藏该构造器 private Single
2015-12-05 16:23:57 411
原创 《疯狂JAVA讲义》——instanceof运算符
instanceof运算符的前一个操作数是一个引用类型变量,后一个操作数是一个类(接口),用于判断前面的对象是否是后面的类,或子类、实现类的实例。若是,返回true;反之,返回false。instanceof运算符前面的操作数编译时的类型要么与后面的类型相同,要么与后面的类型有父子继承关系,否则会引起编译错误。public class InstanceofTest { public stat
2015-12-05 15:54:23 831
原创 《疯狂JAVA讲义》——多态
Java引用变量有两个类型:一个是编译时的类型,一个是运行时的类型。 编译时的类型由声明该变量时所使用的类型决定; 运行时的类型由实际赋值给该变量的对象决定。 当编译时的类型与运行时的类型不一致时,会发生多态(Polymorphism)。代码:class BaseClass { public int book = 6; public void base() {
2015-12-04 17:04:44 513
原创 《疯狂JAVA讲义》——二维数组
Java语言里的数组类型是引用类型,因此,数组变量是一个引用,这个引用指向真实的数组内存。如果数组元素的引用再次指向真实的数组内存,那么这种情形看上去很像多维数组。根据一维数组的定义, type[ ] arrName; 数组元素再次指向真实的数组内存的定义方法就可以是, type[ ][ ] arrName; 即把type的类型定义为type[]型。 接着对这个“二维数组”初始化,根据一位
2015-12-03 19:06:02 375
原创 《编程之美》——数组分割
问题: 将一个无序、元素个数为2N的正整数数组分割为元素个数为N的两个数组,并使两个子数组的和最接近。分析与解法: 【解法一】 动态规划的0-1背包问题。将heap[M](M表示从2N中所有可能的M个元素和组成的集合),从下到上(m->1…->N)最终求的完整的heap[N]。要点:可以想成求不大于sum/2的最接近集合,以下为分析:假设数组A[1..2N]所有元素的和是SUM。模仿动态规划解
2015-12-02 14:43:49 511
原创 《编程之美》——数组循环移位
问题: 把一个含有N个元素的数组循环又移K位,要求时间复杂度为O(N),且只允许使用两个附加变量。分析与解法: 全面地考虑问题,K不一定是小于N的,也有可能远大于N。因为右移K位的结果与右移K-N位的结果相同,所以需要对K进行处理,使K %= N。假设原数组是abcd1234,循环右移4位后,数组变为1234abcd。可以看出数组的前后两段的顺序是不变的,于是把数组看成两个部分,右移的过程是把数
2015-12-02 10:39:56 455
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人