- 博客(27)
- 资源 (22)
- 收藏
- 关注
原创 ptrace的使用举例
修改寄存器的值:#include <stdio.h>#include <stdlib.h>#include <sys/ptrace.h>#include <sys/types.h>#include <sys/wait.h>#include <sys/stat.h>#include <unistd.h>#include <sys/syscall.h>#include <sys/reg.
2016-07-24 22:34:41 1376
原创 网易实习生笔试题:二叉树
题目描述: 有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。 给定二叉树的根节点root,请返回所求距离。class Tree { void Inorder(TreeNode *root,vector<int>&v,int &small,int &
2016-07-23 09:00:59 444
原创 网易实习生笔试试题 求第K大的数
有一个整数数组,请你根据快速排序的思路,找出数组中第K大的数。 给定一个整数数组a,同时给定它的大小n和要找的K(K在1到n之间),请返回第K大的数,保证答案存在。 代码如下:#include<stdio.h>#include<stdlib.h>#define swap(t,x,y) (t = (x),x = (y),y = (t))int partition(int *a,int lo,i
2016-07-22 15:29:34 738
原创 字符串的全排列与组合
题目描述: 输入一个字符串,打印出该字符串中字符的所有排列。 基本思路: 从字符串中选出一个字符作为排列的第一个字符,然后对剩余的字符进行全排列,如此递归,从而得到所有字符的全排列。以对字符”abc”进行全排列为例,可以按下述步骤执行: 将a固定在第一位,求后面bc的排列 将b固定在第一位,求后面ac的排列 将c固定在第一位,求后面ab的排列#in
2016-07-20 19:10:45 4376
转载 矩阵原地转置,空间复杂度为O(1)(暂时先保存下来)
#include<iostream>using namespace std; /* 后继 */int getNext(int i, int m, int n){ return (i%n)*m + i/n;} /* 前驱 */int getPre(int i, int m, int n){ return (i%m)*n + i/m;} /* 处理以下标i为起点
2016-07-20 16:01:25 1599
原创 c语言链表初始化
#include<stdio.h>#include<stdlib.h>#include<malloc.h>typedef struct Node{ struct Node *pNext; int data;}NODE,*PNODE;PNODE init_list() { int len
2016-07-20 15:07:59 3309 3
原创 动态规划(5)求数组中最长递增子序列
写一个时间复杂度尽可能低的程序,求一个数组中(N个元素)中最长递增子序列的长度。#include<stdio.h>#include<stdlib.h>int Max(int a[],int n){// int n = sizeof(a) int max = a[0]; int i = 0; for (i = 1;i < n;i++) { if
2016-07-19 19:12:18 844
原创 动态规划(4)交替字符串
题目描述: 输入三个字符串s1,s2,s3,判断第3个字符串是否由前两个字符串s1和s2错而成且不改变s1和s2中各个字符的原有的相对顺序。
2016-07-19 15:10:28 522
原创 动态规划(3)格子取数问题
问题描述: 有n*n个格子,每个格子里有正数或者0,从最左上角往右下角走。一共走2次,(即从左上角走到右下角走两次),把所有经过的格子里的数加起来,求总和的最大值。如果两次经过同一个格子,则最后求得的总和中该格子中的数只加一次。 思路: 避免“不顾全局,只看局部”(貌似叫贪心) 动态规划保证全局最优。 代码如下:const int N = 202;const int inf
2016-07-19 15:05:40 820
原创 动态规划(2)字符串编辑距离
题目描述: 给定一个源串和目标串,能够对源串进行如下操作: 1)在任意位置插入一个字符 2)替换任意字符 3)删除任意字符 写一个程序,实现返回最小操作次数,使得对源串进行上述这些操作后等于目标串(源串和目标串的长度都小于2000),这就是字符串编辑距离问题: 百度百科定义: 编辑距离(Edit Distance),又称Leven
2016-07-19 08:57:03 584
原创 动态规划(1)最大连续字数组乘积
问题描述: 给定一个浮点数数组,任意取出数组中的若干个连续的数相乘,请找出其中乘积最大的子数组。 动态规划: 概念:动态规划一般用来求解最优化问题,其适用的条件是要求待求解的最优化问题具备两个因素:最优子结构和子问题重叠。通过求解一个个最优子问题,将解存入一张表中,当后续子问题的求解需要用到之前子问题的解时直接查表,每次查表的代价为常数时间。 分析本题: 乘积子数组中可能有正数,负数,也可
2016-07-18 15:23:45 1619
原创 字符串查找(2)KMP算法
Knuth-Morris-Pratt字符串查找算法,简称KMP算法,常用于在一个文本串S中查找一个模式串P出现的位置,因为这个算法有Donald Knuth,Vaughan Pratt,James H.Morris与1977年联合发表,因此取这3个人的姓氏的命名此算法。int KmpSearch(char *S,char *P){ int i = 0,j = 0; int Slen
2016-07-17 18:11:59 619
原创 字符串的查找(1)
题目描述: 假设现在有这样一个问题:有一个文本串S和一个模式串P,要查找P在S中的位置。 解法一:蛮力解决 假设现在文本串S匹配呢到位置i,模式串P匹配到j位置,用蛮力匹配的思路,有: 1)如果当前字符串匹配成功,S[i] == P[j],则i++,j++,继续匹配下一个字符 2)如果匹配失败,S[i] != P[j],则令i = i-j+1,j =
2016-07-17 18:07:03 465
原创 出现次数超过一半的数
题目描述: 数组中有一个数出现的次数超过了数组长度的一半,找出这个数 各种思路: (1)排序,最容易想到的。如果某个数在数组中出现次数超过一半,那么在已经排序好的数组索引的n/2处就一定是要找的这个数。时间复杂度O(nlogn),快排 (2)散列表,空间复杂度O(n) (3)每次删除两个不同的树 (4)记录两个值。时间复杂度是O(n) 代码如下:#include
2016-07-16 23:53:38 634
原创 杨氏矩阵
行和列分别递增的矩阵有一个专有名词叫杨氏矩阵,是由剑桥大学数学家杨表在1900年提出的,而在这个矩阵的查找俗称杨氏矩阵的查找。 定位法:时间复杂度是O(m+n)#include<iostream>using namespace std;#define M 4#define N 4bool find(int a[][N],int value)//注意这里的参数传递,貌似只能这样写 int a
2016-07-16 20:40:08 485
原创 有序数组的查找(个人感觉美到极致的一个算法)
对于包含n个元素的数组,整个查找过程大约要经过logn次比较。(二分查找算法) 代码如下: 非递归版本int BinarySearch(int array[],int n,int value){ int left = 0; int right = n-1; //如果上面这句是int right = n的话,则下面有两处需要改动 //while(left < r
2016-07-16 19:54:47 3633 2
原创 树(5)二叉树层次遍历的应用
#include "stdafx.h"#include <iostream>#include <fstream>#include <queue>#include <stack>#include <Windows.h>using namespace std;typedef struct _Node{ int data; struct _Node *left; st
2016-07-16 11:05:55 487
原创 树(4)判断某个序列是否是二叉查找树的后序遍历结果
二叉搜索树: (1) 它或者是一棵空树; (2) 或者是具有下列性质的二叉树: <1> 若左子树不空,则左子树上所有结点的值均小于它的根结点的值; <2> 若右子树不空,则右子树上所有结点的值均大于它的根结点的值; <3> 左、右子树也分别为二查找序树 5 7 6 | 9 11 10|8 由后序遍历性质可知最后一个元素是根节点 然后根据搜索二叉树性质划分为: 根左子
2016-07-16 10:18:10 344
原创 树(3)树的层次遍历
问题描述:输入一颗二元树,从上往下按层打印树的每个结点,同一层中按照从左往右的顺序打印。 例如输入 8 / / 6 10 / / / / 5 7 9 11 输出8 6 10 5 7 9 11。 代码如下:#include<iostream>#include<queue>using namespace std;struct bstNode{ bstNode
2016-07-16 09:27:14 497
原创 树(2)求二叉树结点最大距离
问题描述: 如果我们把二叉树看成一个图,父子节点之间的连线看成是双向的,我们姑且定义”距离”为两节点之间边的个数。写一个程序求一棵二叉树中相距最远的两个节点之间的距离。 思路:相距最远的两个节点一定是两个叶子节点或者一个叶子节点到它的根节点 代码如下:#include<iostream>using namespace std;struct NODE{ NO
2016-07-15 21:24:19 403
原创 树(1)把二叉查找树转换成有序的双向链表
输入一棵二元查找树,将该二元查找树转换成一个排序的双向链表。 要求不能创建任何新的结点,只调整指针的指向。10 / / 6 14 / / / / 4 8 12 16转换成双向链表 4=6=8=10=12=14=16。 基本思路:中序遍历 构造双向链表 c语言代码如下:#include<stdio.h>#include<stdlib.h
2016-07-15 16:32:39 582
原创 深入理解c语言的return
例(1)#include<stdio.h>#include<stdlib.h>int fun(){ int temp = 3; return temp;}int main(){ printf("%d\n",fun()); return 0;}运行结果如下: [root@localhost ~]# ./a.out 3 反汇编结果如下: (gdb)
2016-07-15 10:18:37 972
原创 畅通工程(并查集)
首先在地图上给你若干个城镇,这些城镇都可以看作点,然后告诉你哪些对城镇之间是有道路直接相连的。最后要解决的是整幅图的连通性问题。比如随意给你两个点,让你判断它们是否连通,或者问你整幅图一共有几个连通分支,也就是被分成了几个互相独立的块。像畅通工程这题,问还需要修几条路,实质就是求有几个连通分支。如果是1个连通分支,说明整幅图上的点都连起来了,不用再修路了;如果是2个连通分支,则只要再修1条路,从两
2016-07-14 22:18:36 496
原创 最近公共祖先(1)
最近公共祖先问题: 情况1:二叉树是个二叉查找树,且root和两个节点的值(a, b)已知。如果该二叉树是二叉查找树,那么求解LCA十分简单。基本思想为:从树根开始,该节点的值为t,如果t大于t1和t2,说明t1和t2都位于t的左侧,所以它们的共同祖先必定在t的左子树中,从t.left开始搜索;如果t小于t1和t2,说明t1和t2都位于t的右侧,那么从t.right开始搜索;如果t1<=t<= t
2016-07-14 15:04:22 298
转载 红黑树
作者:July 二零一一年一月九日本文参考: I、 The Art of Computer Programming Volume I II、 Introduction to Algorithms, Second Edition III、The Annotated STL Sources IV、 Wikipedia V、 Algorithms In C Third EditionVI
2016-07-11 09:29:50 313
原创 红黑树
红黑树:一种特殊的二叉搜索树,满足如下性质: (1)根节点是黑的 (2)每个叶节点是黑的 (3)如果一个节点是红的,它的两个孩子节点是黑的 (4)每个节点要么是红的,要么是黑的 (5)对于任意节点而言,其到叶节点的每条路径到包含相同数目的黑节点
2016-07-11 08:33:06 324
在线预览完整实现.zip
2019-08-16
mysql-connector-java-5.1.7-bin.jar
2017-10-15
百度地图隐藏无关区域
2017-10-11
原型模式代码
2017-09-11
Builder模式
2017-09-03
抽象工厂模式代码
2017-08-31
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人