算法学习
葫芦赛赛
关注机器学习、数据挖掘,欢迎大家交流学习。
展开
-
数组实现堆排序(来源算法导论)
//from 算法导论#include using namespace std;int left_place(int );int right_place(int);void swap_two(int &,int &);void Max_HEAP(int* ,int ,int);void build_HEAP(int *,int );void Heap_sort(in原创 2014-03-12 11:07:46 · 835 阅读 · 0 评论 -
链表的典型题:找到链表倒数K个节点、链表逆转、合并两个链表
三个链表面试题目综合:找到链表倒数K个节点、链表逆转、合并两个链表。#include using namespace std;typedef struct linklist{ linklist *link; int val;}*listPoint;//按节点值升序插入链表void insertNode(listPoint &head,int val){原创 2014-03-25 11:31:16 · 985 阅读 · 1 评论 -
单链表插入方法总结
单链表插入方法总结:前面两种方法是有序插入链表,第三种方法是按数据顺序插入链表。原创 2014-05-21 15:36:17 · 3066 阅读 · 0 评论 -
微软2014校园招聘笔试编程题
struct node{ int elem; node* next;};原创 2014-06-04 21:45:20 · 1765 阅读 · 0 评论 -
Young氏矩阵
一个m x n的Young氏矩阵(Young tableau)是一个m x n的矩阵,其中每一行的数据都从左到右排序,每一列的数据都从上到下排序。Young氏矩阵中可能会有一些∞数据项,表示不存在的元素。所以,Young氏矩阵可以用来存放r≦mn个有限的数。 a)画一个包含元素{9,6,3,2,4,8,5,14,12}的4 x 4的Young氏矩阵。 b)讨论一个m x n的Y原创 2014-06-04 14:46:12 · 1383 阅读 · 0 评论 -
字符串向左旋转
题目描述给定一个字符串,要求把字符串前面的若干个字符移动到字符串的尾部,如把字符串“abcdef”前面的2个字符“ab” 移动到字符串的尾部,即变成“cdefab”。请写一个函数完成此功能,要求对长度为n的字符串操作的时间复杂度为 O(n),空间复杂度为 O(1)。这个题目有原创 2014-05-26 20:40:17 · 768 阅读 · 0 评论 -
在一个字符串中找到只出现1次的首个字符。
#include using namespace std;struct Entry{ Entry() { count=place=0; } int count; int place;};void FindFisrtChar(char *str){ //如果是字符不是只有字母,则数组大小为256 Entry record[26]; i原创 2014-03-22 14:41:03 · 768 阅读 · 0 评论 -
Generate Parentheses
题目地址:原创 2014-08-22 20:59:09 · 786 阅读 · 0 评论 -
栈的压入、弹出序列和栈所有可能的弹出顺序
题目:输入两个整数序列,第一序列表示栈的压入顺序,判断第二个序列是否为该栈弹出顺序。经典的一个笔试题目。首先学会判断某个弹出序列是否为某个栈的压入序列。第一种方法通过进行全排列,然后检测是否满足弹入弹出顺序。第二种方法直接利用递归,通过弹入次数与弹出次数关系进行递归调用。原创 2014-03-24 20:14:02 · 3297 阅读 · 0 评论 -
2014华为校园招聘机试题 等式变换
2014华为校园招聘机试题 等式变换描述: 输入一个正整数X,在下面的等式左边的数字之间添加+号或者-号,使得等式成立。1 2 3 4 5 6 7 8 9 = X比如:12-34+5-67+89 = 51+23+4-5+6-7-8-9 = 5请编写程序,统计满足该输入整数的所有等式的个数。运行时间限制: 无限制内存限制: 无限制输入: 正整数,等原创 2014-08-20 10:02:04 · 1398 阅读 · 0 评论 -
Sort List
O(n log n)时间复杂度和常量地址空间下进行链表排序。链表快速排序与链表的归并排序,以及两种性能对比思考。原创 2014-08-27 17:01:04 · 974 阅读 · 0 评论 -
Permutations Permutations||
全排列在leetcode Permutations Permutations|| 两道题目上的实现。原创 2014-08-29 11:40:20 · 888 阅读 · 0 评论 -
二叉查找树的典型面试题目汇总
二叉查找树的经典面试题原创 2014-03-22 15:34:13 · 1584 阅读 · 0 评论 -
Divide Two Integers
题意就是两个数相除,不能使用除法,乘法,取模。尽快实现两个数相除,很体现算法思想题目。原创 2014-08-26 20:52:47 · 872 阅读 · 0 评论 -
面试题 判断一个数是否为2的n 次方
算法要求:在O(1)的时间去判断 一个数是否是原创 2014-05-04 21:42:21 · 1233 阅读 · 0 评论 -
java 容器中排序算法的源码实现分析(京东电话面试)
电话面试中涉及java 排序底层实现问题,因为是京东广告相关部门所以很重视排序相关问题。原创 2015-09-23 18:44:12 · 1728 阅读 · 0 评论 -
判断链表是否有环
http://blog.csdn.net/thefutureisour/article/details/8174313转载 2014-04-06 21:24:48 · 706 阅读 · 0 评论 -
面试题重建二叉树
题目:已知二叉树的前序遍历和中序遍历结果,重建二叉树。假设不出现重复值的树节点。#include using namespace std;typedef struct BSTree { int val; BSTree*leftchild; BSTree*rightchild;}*BSTreePoint;BSTree *constructCore(int原创 2014-03-24 11:50:06 · 840 阅读 · 1 评论 -
剑指offer 面试题26复杂链表的复制
复制一个复杂链表。在复杂链表中,每个节点有next 指针指向下一个结点外,还有pSibling指向链表任何结点或者NULL。 根据作者思路实现这个需求,代码没有作者简洁。#include using namespace std;struct complexLinklist{ char val; complexLinklist *next; complexLi原创 2014-03-27 15:30:26 · 1087 阅读 · 1 评论 -
二叉搜索树转为双向链表
二叉搜索树转为双向链表输入一颗二叉搜索树,将该二叉搜索树转成一个排序的双向链表。要求不创建任何新结点,只能调整树中结点指向。其实这就是二叉树中序遍历的一个变种。#include using namespace std;typedef struct BinaryTreeNode{ int val; BinaryTreeNode *left; BinaryTreeNod原创 2014-03-30 18:08:39 · 832 阅读 · 1 评论 -
电话面试题--查找数组中第K大的元素
查找数组中第K大的元素。题目最简单做法就是先进行按元素大小递减的快速排序,然后遍历数组走到K下标即为题目所要求。但是这个需要耗费时间是快排O(nlogn)再加上遍历数组到第K个位置。这样的时间复杂度肯定面试官难以满意。换个思维假如我对整个数组进行堆排序发现其实时间任然是O(nlogn)和快排基本没提高,但是朝着堆的方向是对的了只是建堆时我们只需要对数组K个元素建堆,然后遍历从K+1开始到最原创 2014-03-29 10:37:46 · 1745 阅读 · 1 评论 -
找出数组中出现次数超过数组长度一半的元素
数组中出现次数超过一半的数字来自剑指offer,其中两种方法思想都很好,感谢作者。#include using namespace std;/*两种思想:第一种想到统计上的中位数定义如果存在满足条件的数,则肯定该数为数组的中位数,找到中位数没必要对整个数组进行排序,只需要利用快速排序中的Partition方法找到某个元素应该在middle位置,然后检查是否满足次数超原创 2014-03-30 11:34:04 · 6198 阅读 · 2 评论 -
电话面试:求两个链表的第一个公共结点
求两个链表的第一个公共结点题目另外一种说法也可以为两个链表第一个交点。首先确定相交在链表上的含义,链表相交意味着某个节点到链表尾都是相同。其实这个问题可以联想到路程相遇问题,如何使得两个链表同时到第一个公共结点,其实很简单,如果得到两个链表长度,然后长的链表直接从它比短链表长的数目的结点开始,则设定两个指向链表的指针就能实现功能。#include using namespace std原创 2014-03-30 21:49:07 · 846 阅读 · 0 评论 -
排序算法的总结
排序算法总结以及实现。#include using namespace std;/*直接插入排序,主要是找到需要插入位置,while循环就是为了找到插入位置。数组存放从1开始。算法是稳定的。性能分析:最佳情况为输入数组已经排好序 O(n),最差为逆序O(n^2);*/void Insert_Sort(int *array,int len){ fo原创 2014-04-01 11:28:12 · 801 阅读 · 0 评论 -
二叉查找树(来自算法导论)
#include using namespace std;typedef struct TreeNode{ int val; TreeNode*left; TreeNode*right; TreeNode*pre;//指向父节点的指针}*TreePoint;//采用循环而非递归的插入树节点。void Tree_Insert(TreePoint& root,i原创 2014-03-13 15:56:49 · 839 阅读 · 0 评论 -
红黑树的实现与应用
正如 http://blog.csdn.net/huruzun/article/details/24634593原创 2014-05-02 11:30:55 · 5694 阅读 · 0 评论 -
动态规划实现最长公共子序列
#include using namespace std;int c[100][100];int b[100][100];//标示最长子序列void LCS_length(char *X,char *Y,int X_len,int Y_len){ int i,j; for (i=0;i<=X_len;i++) { c[i][0]=0; } for原创 2014-03-18 17:05:41 · 748 阅读 · 0 评论 -
逆波兰实现计算器
#include #include #include using namespace std;bool isopretor(char ch){ switch(ch) { case '+' : case '-': case '*': case '/': case '%': return 1; default: return -1原创 2014-03-22 20:46:59 · 1065 阅读 · 0 评论 -
递归方法解决问题简单例子。
中兴公司面试题:输入两个整数n和m,从数列1,2.......n中随意取几个数,使其和等于m,要求将其中所有的可能组合列出来。#include#include using namespace std;void computer(int n,int m,vector&path,int i,int current_sum){ //递归结束条件。 if (current_原创 2014-03-22 20:39:42 · 1436 阅读 · 0 评论 -
面试题 自己实现strcpy 函数
经常看到需要自己实现字符串拷贝函数,原创 2014-05-04 21:35:54 · 2973 阅读 · 0 评论 -
石子合并
问题:经典的石子合并问题,不过现在简化为线性问题,而不是环形问题。放着n堆石子(n比如3 4 6 5 4 2最后得到的结果为:61分析:经典的DP算法,代码如下:其中通项式为:a[i][j] = min{k | a[i][k] + a[k+1][j] + sum[i...j], k = i...j-1}其中a[i][j]表示从第i堆到第j堆合并能够取转载 2014-03-23 15:30:19 · 815 阅读 · 1 评论 -
随机数范围相关问题
问题:已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10。原创 2014-05-05 09:52:06 · 1035 阅读 · 0 评论 -
单链表建立删除和就地逆置
#include using namespace std;typedef struct linklist{ linklist *link; int val;}*listPoint;//链表插入思想来自C与指针,链表处理不带头结点。void insertType2(linklist **linkp,int new_val){ listPoint current原创 2014-03-23 15:16:33 · 951 阅读 · 0 评论 -
钱币兑换问题
硬币兑换问题原创 2016-03-28 19:59:27 · 1245 阅读 · 0 评论