数据结构与算法
文章平均质量分 69
swffsdgasdg
dfgdfsgdgsagvxzvzxvxcqwrwrwerza
展开
-
leetcode Maximum Subarray 最大子序列
Maximum Subarray Total Accepted: 28381 Total Submissions: 83696 My SubmissionsFind the contiguous subarray within an array (containing at least one number) which has the largest sum.For exam原创 2014-10-09 13:57:33 · 899 阅读 · 0 评论 -
二叉树建立
二叉树建立算法#include#includetypedef struct BiTNode{ int val; struct BiTNode *lchild,*rchild;}BiTNode;void create1(BiTNode **r)//用两个星,这样才可以修改指针{ int val; scanf("%d ",&val); if(val=原创 2014-11-25 22:22:11 · 1251 阅读 · 0 评论 -
快速排序
#include#includeusing namespace std;void InsertionSort(int a[],int N){ int j,p,tmp; for(p=1;p<N;p++) { //1-N-1趟目标 tmp=a[p]; for(j=p;j>0 && a[j-1]>tmp;j--) { a[j]=a[j-1]; } a[j]原创 2014-12-17 01:25:39 · 1176 阅读 · 0 评论 -
leetcode-Set Matrix Zeroes
Set Matrix Zeroes Total Accepted: 25064 Total Submissions: 80609 My Submissions Question Solution Given a m x n matrix, if an element is 0, set its entire row and column to 0. Do it in place.c原创 2015-01-07 04:25:53 · 790 阅读 · 0 评论 -
哈希表实现
#include#define INT_MIN -65536struct hashTable{ int *table; int length; hashTable(int size):length(size) { table=new int[size]; for(int i=0;i<size;i++) table[i]=INT_MIN; }};int原创 2015-01-13 14:56:28 · 783 阅读 · 0 评论 -
散列表
#include//链表typedef struct listNode{ int val; listNode *next; listNode(int key):val(key),next(NULL){} listNode():val(0),next(NULL){}}*position;typedef position list;//散列表typedef struct h原创 2014-12-24 12:24:28 · 861 阅读 · 0 评论 -
链表排序
/** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode(int x) : val(x), next(NULL) {} * }; */class Solution {public: ListNode *g原创 2015-02-02 20:10:20 · 858 阅读 · 0 评论 -
堆排序
#include#includeusing namespace std;void percDown(int a[],int i/*当前位置*/,int N/*数组大小*/){ //初始化 int child; int temp; //依次下沉 for(temp=a[i];(2*i+1)<N;i=child) { //下沉左边 child=2*i+1; //找大原创 2014-12-13 20:54:40 · 599 阅读 · 0 评论 -
leetcode-Construct Binary Tree from Preorder and Inorder Traversal
Given preorder and inorder traversal of a tree, construct the binary tree.Note:You may assume that duplicates do not exist in the tree.class Solution {private: TreeNode *root; v原创 2015-01-01 22:23:20 · 756 阅读 · 0 评论 -
C递归版的全排列和组合算法
For example,[1,2,3] have the following permutations:[1,2,3], [1,3,2], [2,1,3], [2,3,1], [3,1,2], and [3,2,1].全排列:从1开始递归,然后对2递归,最后对3递归 顺序是先输出 1 2 3 1 3 2 2 1 3 2 3 1 .......原创 2015-02-12 05:26:15 · 2321 阅读 · 0 评论 -
九度OJ
题目1185:特殊排序时间限制:1 秒内存限制:32 兆特殊判题:否提交:10572解决:2540题目描述:输入一系列整数,将其中最大的数挑出,并将剩下的数进行排序。输入:输入第一行包括1个整数N,1接下来的一行有N个整数。输出:可能有多组测试数据,对于每组数据,第一行输出一个整数,代表N个整数中的最大值,并将此值从数组中去除,将剩下的数进行排序。第二行将排原创 2015-02-12 23:48:40 · 1122 阅读 · 0 评论 -
上千万或上亿数据(有重复),统计其中出现次数最多的N个数据. C++实现
上千万或上亿的数据,现在的机器的内存应该能存下。所以考虑采用hash_map/搜索二叉树/红黑树等来进行统计次数。然后就是取出前N个出现次数最多的数据了,可以用第2题提到的堆机制完成。#include "IOSTREAM"#include#include#includeusing namespace std;int main(void){ //海量待统计数据 char原创 2015-03-14 00:01:46 · 6444 阅读 · 0 评论 -
查找1亿个数里面最大的100个数。
#include#include#include#include#include#include#includeusing namespace std;int main(){ vector a(100000000,0); srand((int)time(0)); for(int i=0;i<100000000;i++) {原创 2015-03-31 13:42:40 · 2152 阅读 · 0 评论 -
leetcode-Binary Tree Level Order Traversal 二叉树层序遍历
leetcode-Binary Tree Level Order Traversal 二叉树层序遍历#include#includeusing namespace std;typedef struct BiTree{ int val; struct BiTree *lchild; struct BiTree *rchild;}BiTree;void main(原创 2014-11-24 21:22:59 · 817 阅读 · 0 评论 -
二叉树测试数据
二叉树测试数据二叉树数据结构原创 2014-11-22 02:10:48 · 1582 阅读 · 0 评论 -
leetcode-Remove Duplicates from Sorted Array
leetcode-Remove Duplicates from Sorted Array Given a sorted array, remove the duplicates in place such that each element appear only once and return the new length.Do not allocate extra spac原创 2014-11-12 15:14:25 · 705 阅读 · 0 评论 -
leetcode Remove Duplicates from Sorted List
Remove Duplicates from Sorted ListGiven a sorted linked list, delete all duplicates such that each element appear only once.For example,Given 1->1->2, return 1->2.Given 1->1->2->3->3, return 1->2->3.很简单,先判断第一个位置否为空,不为空的话再判断下 个位置是否为空,如果都为空那么就不用操作了。如果两原创 2014-10-05 16:35:47 · 954 阅读 · 0 评论 -
leetcode-Unique Binary Search Trees
Given n, how many structurally unique BST's (binary search trees) that store values 1...n?For example,Given n = 3, there are a total of 5 unique BST's.去网上搜n个二叉搜索树的递推公式或者Catalan数,可以由h(n)=C(2n,n)/(n+1)得到h(n)=[2n*(2n-1)*...(n+2)]/[n!].原创 2014-09-29 15:04:04 · 874 阅读 · 0 评论 -
高效率求约数的个数
求约数的个数方法有很多,你可以使用O(n)的方法来遍历看是否为约数,更可以使用O(sqrt(n))复杂度的算法从1~sqrt(n)来判断个数,但是在这里我们给出的是一种稍快于O(sqrt(n))的方法,大概节省2/3左右的时间.原创 2014-08-27 15:15:32 · 13750 阅读 · 5 评论 -
九度OJ 1480 动态规划 最大上升子序列和
题目1480:最大上升子序列和时间限制:1 秒内存限制:128 兆特殊判题:否提交:1112解决:419题目描述:一个数的序列bi,当b1 你的任务,就是对于给定的序列,求出最大上升子序列和。注意,最长的上升子序列的和不一定是最大的,比如序列(100, 1, 2, 3)的最大上升子序列和为100,而最长上升子序列为(1, 2, 3)。输入:输入包含多组测试数据。每组测试原创 2014-08-20 14:39:50 · 1029 阅读 · 0 评论 -
遍历结果推导二叉树详细解析
有时候我们会碰到这种题目,给定一棵二叉树的前序遍历和中序遍历,求其后序遍历,让你编程实现该功能,这个原理其实并不是很复杂,但是参考很多人的文章,写的零零散散,并没有把代码剖析的很详细,所以把相关的资料和自己的理解整理于此.对于这样的题目,我们首先得了解前序遍历和中序遍历的原理。对于三种遍历而言,前序遍历是先打印根节点再递归调用左子树和右子树,中序是左子树到跟再到右子树,后序是左子树到右子树再到原创 2014-05-11 20:29:37 · 3889 阅读 · 3 评论 -
彻底理解并查集
并查集并查集也叫不相交集合(disjoint-set),是一种比较高级的数据结构。为什么叫不相交集合呢?可以看到下面的图中有五种颜色,代表他们有五个集合,意味着他们都是互相独立不相交的,所以称为不相交集合。并查集原创 2014-08-11 14:39:18 · 1061 阅读 · 0 评论 -
最简洁的广度优先遍历算法模板
最简洁的广度优先遍历算法模板原创 2014-08-12 11:38:33 · 2562 阅读 · 0 评论 -
深度理解跳跃链表:一种基于概率选择的平衡树
深度理解跳跃链表:一种基于概率选择的平衡树二叉树是一种常见的数据结构。它支持包括查找、插入、删除等一系列操作。但它有一个致命的弱点,就是当数据的随机性不够时,会导致其树形结构的不平衡,从而直接影响算法的效率。 跳跃链表(Skip List)是1987年才诞生的一种崭新的数据结构,它在进行查找、插入、删除等操作时的期望时间复杂度均为O(logn),有着近乎替代平衡树的本领。而且最重要的一点,就是它的编程复杂度较同类的AVL树,红黑树等要低得多,这使得其无论是在理解还是在推广性上,都有着十分明显的优势。原创 2014-09-09 17:29:22 · 4716 阅读 · 3 评论 -
题目1032 ZOJ
题目描述:读入一个字符串,字符串中包含ZOJ三个字符,个数不一定相等,按ZOJ的顺序输出,当某个字符用完时,剩下的仍然按照ZOJ的顺序输出。输入:题目包含多组用例,每组用例占一行,包含ZOJ三个字符,当输入“E”时表示输入结束。1输出:对于每组输入,请输出一行,表示按照要求处理后的字符串。具体可见样例。样例输入:ZZOOOJJJZZZZ原创 2014-08-26 20:08:53 · 871 阅读 · 0 评论 -
求哈夫曼树的带权路径长
题目描述:哈夫曼树,第一行输入一个数n,表示叶结点的个数。需要用这些叶结点生成哈夫曼树,根据哈夫曼树的概念,这些结点有权值,即weight,题目需要输出所有结点的值与权值的乘积之和。输入:输入有多组数据。每组第一行输入一个数n,接着输入n个叶节点(叶节点权值不超过100,2)。输出:输出权值。样例输入:5 1 2 2 5 9样例输出:37来源:2原创 2014-07-28 11:05:58 · 29100 阅读 · 10 评论 -
好记的迪杰斯特拉算法
好记的迪杰斯特拉算法核心代码不包括花括号的话10行代码原创 2014-08-13 16:46:18 · 995 阅读 · 0 评论 -
杭电OJ 1003题 动态规划 最大连续序列和
Max SumTime Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 145161 Accepted Submission(s): 33897Problem DescriptionGiven a seque原创 2014-08-19 21:29:59 · 1462 阅读 · 2 评论 -
leetcode-Merge Two Sorted Lists
Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.递归版/** * Definition for singly-linked list.原创 2014-11-10 12:09:11 · 696 阅读 · 0 评论 -
无源最短路径之--地铁换乘
问题描述:描述:已知2条地铁线路,其中A为环线,B为东西向线路,线路都是双向的。经过的站点名分别如下,两条线交叉的换乘点用T1、T2表示。编写程序,任意输入两个站点名称,输出乘坐地铁最少需要经过的车站数量(含输入的起点和终点,换乘站点只计算一次)。地铁线A(环线)经过车站:A1 A2 A3 A4 A5 A6 A7 A8 A9 T1 A10 A11 A12 A13 T2 A14 A15原创 2015-03-24 16:30:11 · 1527 阅读 · 0 评论