自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(50)
  • 收藏
  • 关注

原创 引用&指针

《C++ Primer》 引用: 引用必须初始化,初始化一旦完成,引用将和它的初始值对象一直绑定在一起。 引用即别名。 因为引用本身不是一个对象,不能定义引用的引用。 引用只能绑定在对象上,而不能与字面值或某个表达式的计算结果绑定在一起。指针: 指针本身是一个对象,允许对指针赋值和拷贝。 指针无需在定义时赋予初值。 例:int *p=&ival p被定义为一个指向int的指针,初始

2017-10-18 17:47:50 309

原创 MySQL(4)操作数据表中的记录

插入记录INSERT INSERT [INTO] tbl_name [(col_name,…)] {VALUES|VALUE} ({expr|DEFAULT},…),(…),… 举例:CREATE TABLE users(id SMALLINT UNSIGNED PRIMARY KEY AUTO_INCREMENT, username VARCHAR(20) NOT NULL, password

2017-09-13 13:26:48 223

原创 MySQL(3)约束以及修改数据表

MySQL外键约束的要求解析约束 1.保证数据的完整性和一致性。 2.分为表级约束和列级约束 3.约束类型包括: NOT NULL(非空约束) PRIMARY KEY(主键约束) UNIQUE KEY(唯一约束) DEFAULT(默认约束) FOREIGN KEY(外键约束)FOREIGN KEY(外键约

2017-09-12 16:49:54 335

原创 MySQL(2)数据类型与操作数据表

MySQL数据类型之整型数据类型: 决定数据存储格式,代表不同的信息类型。整型 有符号位:数字最高位01表示正负MySQL数据类型之浮点型 注意M和D,一定M>=DMySQL数据类型之日期时间型 列类型 存储需求 YEAR 1 TIME

2017-09-11 11:34:26 228

原创 MySQL(1)

序言 MySQL是一个开源的关系型数据库管理系统。MySQL安装与配置 MySQL目录结构 ·bin目录,存储可执行文件 ·data目录,存储数据文件 ·docs,文档 ·include目录,存储包含的头文件 ·lib目录,存储库文件 ·share目录,错误消息和字符集文件my.ini [client] //指

2017-09-10 23:09:16 317

原创 字符串求数字长度

#include <stdio.h>#include <iostream>#include <cstring>#include <stdlib.h>#include <math.h>using namespace std;void outhanshu(char *str,int end,int max){ for(int j=end-max+1;j<=end;j++){

2017-09-08 17:24:27 430

原创 报数—循环链表

struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};void creatlist(ListNode *&phead,int &n){ if(n<=99){ phead=(struct Li

2017-09-08 17:21:23 349

转载 后缀树

后缀树简介:后缀树,就是把一串字符的所有后缀保存并且压缩的字典树。相对于字典树来说,后缀树并不是针对大量字符串的,而是针对一个或几个字符串来解决问题,比如字符串的回文子串,两个字符串的最长公共子串等等,后面应用会说。性质:一个字符串构造了一棵树,树中保存了该字符串所有的后缀。操作:就是建立和应用。1.建立后缀树比如单词banana,它的所有后缀显示到下面的。1代表从第一个字符为起点,终点不用说都是

2017-08-16 16:45:02 1792

原创 动态规划(2)

案例1 有n级台阶,一个人每次上一级或者两级,问有多少种走完n级台阶的方法。 分析: 走到第i级台阶,需要之前走到第i-1级台阶或第i-2级台阶。 所以,走完i级台阶的方法说=走完i-1级台阶的方法数+走完i-2级台阶的方法数 有了初始值和表达式,下可写出暴力搜索的代码public int s1(int n){ if(n<1){ return

2017-07-25 16:49:38 153

原创 动态规划(1)

什么是动态规划? 举例 这题十分经典,因为可以显示多种方法暴力搜索方法 定义递归函数:int p1(arr,index,aim),它的含义是如果用arr[index…N-1]这些面值的钱组成aim,返回总的方法数public int coins1(int[] arr,int aim){ if(arr==null||arr.length||aim<0){

2017-07-20 23:45:40 207

原创 大数据(2)

案例3 有一个包含20亿个全是32位整数的大文件,在其中找到出现次数最多的数,但内存限制只有2G 解决思路 下再用哈希表依次处理各个文件,统计每种数出现的次数,此时肯定不会溢出。 案例4 先分析哈希表思路: bitmap思路: 找到这个技术不足的区间,假设为a 再遍历一次40亿个数,此时只关注区间a上的数,并用bitmap统计区间a上的数的出现情况。 占用差

2017-07-19 22:49:05 216

原创 大数据

认识Map-Reduce 根据哈希函数的性质,我们知道,单词相同的任务会被分在一起。reduce阶段 Map-Reduce的优势在于大数据处理。常见海量处理题目解题关键 案例1 请对10亿个IPV4的ip地址进行排序,每个ip只会出现一次。 思路:先转为整数,再排序 下介绍更省空间的方法 没明白!! 案例2 请对10亿人的年龄进行排序 大数据题目多

2017-07-19 22:12:00 193

原创 概率(2)

案例6 案例7 然后把a和N-1交换 然后把b和N-2交换 直到打印M个数即可 此技巧比较重要!案例8

2017-07-19 21:11:50 187

原创 概率(1)

常见题型 1、在笔试面试中常作为客观问题出现(选择题) 2、在笔试中往往出现概率、期望的计算。 3、往往利用古典概率进行计算(组合数学)概率的应用 1.利用随机来改进著名算法(快速排序) 2.随机数发生器(用给定的随机数发生器构造另一个)案例1 1.首先求出8只球队分成4组比赛的方法数 第一组任选一个,剩下7个里选一个进第一组 第二组任选一个,剩下5个里选一个进第一组 第三组任

2017-07-19 20:31:01 206

原创 排列组合(2)

案例7 下把左括号记为1,右括号记为-1 此时,为第一次右括号比左括号多的情况。 下把该部分取反 该式很重要,后面的例题都用到了案例8 出入栈的顺序数就是合法括号顺序个数。 同理,5块钱相当于左括号,10块钱相当于右括号。案例9 求n个无差别的节点构成的二叉树有多少种不同的结构? 假设第一个数为头部,左子树为空,右子树总数为f(n-1)

2017-07-18 23:52:26 253

原创 排列组合(1)

概率组合题目分类 1.以高中数学为基础的古典概率计算方法 2.斐波那契数列和卡特兰数 3.以选择题居多案例1 案例2 案例3 方法1: 6个人全排列6!=720 甲乙相邻5!种,乙甲相邻5!种,共240种 同理,甲丙相邻240种。 中间情况为2*4!=48 答:720-240-240+48=288方法二: 剩下3个人选两个邻居,A32,六种可能

2017-07-18 23:09:36 363

原创 位运算(2)

案例2 如何不用额外变量交换两个整数的值? 常规方法:引出变量c 如果不用额外变量: ^为异或案例3 给定两个32位整数a和b,返回a和b中较大的,但不能用任何比较判断。 方法一:得到a-b的符号,根据符号决定返回a或bpublic static int flip(int n){ return n^1;}public static int sign(int n){

2017-07-18 22:16:02 347

原创 位运算(1)

算术运算和位运算的操作符 案例1 本题涉及大数据和位运算 普通方法: 布隆过滤器可精确的代表一个集合 可精确判断某一元素是否在此集合中 精确程度由用户的具体设计决定 不可能做到100%精确布隆过滤器优势在于,利用很少的空间,可以做到精确率较高。 每次哈希函数后,把相应bitarray涂黑。 所有URL完成该过程后,此时的bitarray就是一个布隆过滤器。 这个布隆过滤器代表

2017-07-18 21:32:55 400

原创 二分搜索(2)

案例1 本题可用二分搜索来实现,时间复杂度O(logN) 1.arr为空或长度为0,返回-1,表示局部最小值不存在。 2.arr为空或长度为1,返回0,因为此时0是局部最小位置。 3.arr长度大于1 (1)首先检查两头的位置 若两头位置都不是局部最小位置,说明趋势为 此时可以看mid。 若mid左右相比最小,局部最小,返回。 若mid比右小,比左大 可以对左部分

2017-07-17 23:50:48 204

原创 二分搜索(1)

二分搜索的应用和考察点二分搜索应用常见的场景 1.在有序序列中查找一个数,时间复杂度为O(logN) 2.并不一定非要在有序序列中才能得到应用。二分搜索常见的考察点 1.对边界条件的考察及代码实现的能力 避免死循环和点的遗漏二分搜索常见题目的变化 1.给定处理或查找的对象不同。 2.判断条件不同。 3.要求返回的内容不同在有序循环数组中进行二分搜索 有序循环数组: 二分搜索的重要提

2017-07-17 22:49:35 254

原创 链表(2)

案例1 给定一个整数num,如何在节点值有序的环形链表中插入一个节点值为num的节点,且保证这个环形单链表依然有序。 解法:时间复杂度O(N),额外空间复杂度O(1)。 插入node,返回head即可。 3.若p和c转一圈都没发现应插入的位置(该节点比整个链表都大或都小),此时node应插入头结点的前面。 若节点值最小,头结点应返回该节点;若节点值最大,头结点应返回原头节点。案例2

2017-07-17 22:04:10 442

原创 链表(1)

链表问题知识点和注意事项 1.链表问题算法难度不高,但考察代码实现能力。 2.链表和数组都是一种线性结构,链表空间不一定保证连续,是临时分配的链表的分类 1.按链接方向分类:单链表,双聊表 2.有无环:普通链表,循环链表链表问题代码实现关键点 1.链表调整函数的返回值,类型要求往往是节点类型。 2.处理链表过程中,先采用画图的方式理清逻辑。 3.链表问题对于边界条件讨论要求严格。关于链

2017-07-16 23:05:05 201

原创 栈与队列(3)

案例5 有一个整型数组arr和一个大小为w的窗口从数组最左滑到最右边,窗口每次向右滑一个位置,返回一个长度为n-w+1的数组res,res[i]表示每一种窗口状态下的最大值,以数组为[4,3,5,4,3,3,6,7],w=3为例。最终返回[5,5,5,4,6,7]。分析:普通解法的时间复杂度O(N*w),也就是每次对每个窗口遍历其中的w个数,选出最大值。 最优解时间复杂度O(N) 解: 双端

2017-07-16 21:46:53 200

原创 栈与队列(2)

案例1 实现一个特殊栈,在实现基础栈功能基础上,能返回栈中最小元素的操作getmin 要求: 1.pop、push、getMin操作时间复杂度都是O(1)。 2.设计的栈类型可以使用现成的栈结构。 方法1:两个栈,一个栈正常stackData,一个栈stackmin用于记录最小值 压入效果如图,stackmin只压入比栈顶小的值。 弹出的步骤: 这样stackmin在弹出过程

2017-07-13 23:16:38 176

原创 队列和栈(1)

栈和队列的基本性质 栈:先进后出 队列:先进先出两者在实现结构上可以有数组和链表两种形式。 1.数组结构实现较容易 2.用链表结构较复杂,因为涉及许多指针操作。栈结构的基本操作 1.pop操作,弹出栈顶 2.top或peek操作,访问栈顶 3.puch栈顶压入 4.size操作队列的基本操作 与栈操作的不同: push是在队头加入元素,pop是在队尾弹出一个元素。栈和队列的基本操

2017-07-13 22:16:02 186

原创 字符串(3)

案例7 给定一个字符串str,请将其中所有空格字符替换成“%20”,假设str后面有足够的空间。 分析: 所以从位置8开始,拷贝 c复制到位置8 朝前遍历,遇到空格,就5-7位置为%20 朝前遍历,遇到b,4为b 朝前遍历,遇到空格,就1-3为%20 朝前遍历,遇到a,0为a 结束。案例8 给定一个字符串str,判断是不是整体有效的括号字符串。 例子: 为true:“()

2017-07-12 23:48:28 364

原创 字符串(2)

案例1 题目: 普通解法为二叉树遍历+匹配问题 考察t1中以每个节点为头的子树是否与t2一致。 若T1节点数为N,T2为M。 普通解法的时间复杂度为O(N*M)最优解为二叉树序列化+KMP算法 时间复杂度为O(N+M) 案例2 分析:使用哈希表做字符计数 案例3 一个字符串,其前面任意部分挪到后面去形成的字符串叫做str的旋转词。比如str=“1234”,旋转词有“123

2017-07-11 22:54:27 346

原创 字符串(1)

字符串面试题的特点 广泛性 1.字符串可以看做字符类型的数组,与数组排序、查找、调整有关 2.很多其它类型面试题可看作自字符串类型的面试题。需掌握的概念 1.回文 题目(1) 判断一个字符串是否为回文 解法:递归 递归思路:一个回文字符串其中内部也是回文。所以,我们只需要以去掉两端的字符的形式一层层检查,每一次的检查都去掉了两个字符,这样就达到了缩少问题规模的目的。新问题与原问题有着

2017-07-11 22:42:48 288

原创 排序(4)

案例4 荷兰国旗问题。只包含0,1,2的整数数组进行排序,要求使用交换、原地排序,而不是利用计数进行排序。 分析:本题主要过程与快排划分过程类似。时间复杂度O(N),空间复杂度O(1)。 如图,一次检查,为0,就和首位交换,然后0区吃一个数;为2,就和末位交换,然后2区吃一个数。检查到二区域位置,整个过程结束。案例5 在行列都排行序的矩阵中找数 0 1 2 5 2 3 4 7 4

2017-07-10 22:22:44 225

原创 排序(3)

案例1: 已知一个几乎有序的数组,几乎有序是指,如果把数组排好顺序的话,每个元素移动的距离不超过k,并且k相对于数组长度来说很小。问选什么方法对其排序比较好。 分析:时间复杂度从小到大分析 复杂度O(N)的排序算法: 计数排序、基数排序 不基于比较的排序算法的限制: 不适用所有情况复杂度O(N^2)的排序算法: 冒泡排序、选择排序 这两个排序算法与数据原始序列无关,时间复杂度严格符合

2017-07-09 23:04:36 261

原创 排序(2)

下介绍经典排序算法的空间复杂度 O(1) 插入排序、选择排序、冒泡排序(时间复杂度O(N^2)) 推排序、希尔排序 O(logN)~O(N) 快速排序 O(N) 归并排序 O(M) 计数排序、基数排序 M为桶的数量排序算法-稳定性 概念:假定待排序的记录序列中,存在多个具有相同关键字的记录,若经过排序,这些记录的相对次序保持不变,称这种排序算法是稳定的,否则称为不稳定的。稳

2017-07-08 22:54:29 182

原创 OJ入门介绍

OJ——online judge要求:正确处理输入格式;正确处理输出格式;输入输出均是标准输入/输出,不用考虑读写文件。1.正确处理输入格式 常见输入格式: 预先不输入数据的组数; 预先输入数据的组数; 只有一组输入数据应对: 读到文件结尾; 读数据组数再循环; 直接读入数据。预先不输入数据的组数 C++while(cin>>a>>b){ cout<<a+b<<endl;

2017-07-07 21:59:51 805

原创 排序(1)

冒泡排序 时间复杂度O(N^2)选择排序 时间复杂度O(N^2) 思路:一列数,选出最小值,放在首位。剩下数,选出最小值,放在次位,依次类推。插入排序 时间复杂度O(N^2) 1.第1 2数比较,排序。 2.第3 个数依此和2 1比较排序。 3.第4个数依此和3 2 1比较,排序,以此类推。以上三个经典算法,实现复杂度均为O(N^2)。下介绍时间复杂度为O(N*logN)的算法。归并排

2017-07-07 16:12:42 227

原创 二叉树(4)

折纸问题 把一段纸条竖着放在桌子上,然后从纸条下方向上方对折1次,压出折痕后展开,此时折痕是凹下去的。若从纸条下方向上方对折2次,压出折痕后展开,此时有三条折痕,从上到下依次是下折痕、下折痕和上折痕。给定一个输入参数N,代表纸条都从下边向上方连续对折N次,请从上到下打印所有折痕的方向。 是一颗满二叉树结构, 实现先左再中,最后右的中序遍历,就是所有折痕的打印顺序(从下到上)。用递归实现。案

2017-07-07 00:04:54 485

原创 二叉树(3)

二叉树的子树 在二叉树中以任何一个节点为头部的整棵树称作二叉树的子树。 平衡二叉树(AVL树)1.空树是平衡二叉树 2.如果一棵树不为空,并且其中所有的子树都满足各自的左子树与右子树的高度都不超过1。 给定一颗二叉树的头节点head,判断一棵树是否是平衡二叉树。public boolean isBalance(Node head){boolean[] res =

2017-07-05 23:41:57 401

原创 二叉树(2)

二叉树按层遍历 1.针对二叉树的宽度优先遍历。 2.宽度优先遍历常使用队列结构。 3.面试中,该类题目常对换行有所要求。给定一颗二叉树的头节点head,请按照现在大家看的的这种格式打印。 要求打印成: 1 2 3 4 5 6 7 8last:表示正在打印的当前行的最右节点 nlast:表示下一行的最后节点思路:每一层都作从左到右的宽度优先遍历。二叉树的序列化和反序列化 1.二叉树

2017-07-04 09:02:26 337

原创 二叉树(1)

二叉树节点的结构class Node{ int value; Node left; Node right; Node(int data){ this.valve=data; } }要求掌握内容 1.能结合队列、栈、链表、字符串等很多数据结构。 2.需掌握图的遍历方式,比如BFS和DFS。 3.需掌握递归函数的使用,并自

2017-07-04 08:51:13 231

原创 计算字符串最后一个单词的长度

华为机试题 等级:简单 知识点:字符串 需要注意的地方: 1.用数组作函数参数的使用 2.字符串输入cin.getline 3.审题,考虑特殊字符的输入#include <iostream>#include <string>using namespace std;int str_length(char s[]);void main(){ char str[139]; in

2017-07-01 23:17:00 228

转载 cin<<、cin.get()、getline()(个人简单整理)黄刚的博客

cin<<, cin.get,cin.getline等函数深入分析 很多初学者都认为cin函数是一个很简单的函数,其实不然!cin函数有很多需要了解的知识(比如:cin的返回值是什么,cin提供了哪些成员函数且分别是什么作用,如cin.clear(),cin.ignore(), cin.fail(), cin.good()等等),如果没有很好的掌握,在使用的时候很可能会出问题却不知其原因!而且很多

2017-07-01 22:57:44 368

原创 算法竞赛入门经典3.5 谜题UVa455

#include  #include using namespace std; int main(){  char block[5][5]={{'T','R','G','S','J'},{'X','D','O','K','I'},{'M',' ','V','L','N'},{'W','P','A','B','E'},{'U','Q','H','C','F'}};int i=0;int a=2;in

2016-07-28 21:13:37 339

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除