数据结构与算法
文章平均质量分 55
碎碎是个老司机
你的GTR不克服抬头过重的问题,是赢不了的我的86的
展开
-
16年华为春季实习生机试题
给出一个字符串形式表达的二叉树,求出指定节点深度。 输入的树形结构字符串格式为: 1、以父节点、左子树、右子树表示的二叉树;每个父节点不会超过两个子节点; 2、树的每一个节点采用单个字母表示;树的层次采用数字表示,树根的层次为1,下一层为2,不会超过9层; 3、字符串以“节点名称 层次数 节点名称 层次数…”的形式出现,同一个父节点下,先出现的为左子树。 例如字符串“原创 2016-03-31 16:17:12 · 575 阅读 · 0 评论 -
基数排序
基数排序,是基于计数排序的稳定排序。对于元素的每一位进行排序,例如十进制的101,100,111从个位先计数排序,再十位计数排序,最后百位上计数排序。 当然也并一定是按十进制来进行排序,可以按任何进制进行排序。 时间复杂度为O(k * n),k为位数;空间复杂度为O(radix + n),radix为计数所用的桶,比如10进制为10,十六进制为16。 golang代码如下: package原创 2017-02-06 13:53:04 · 455 阅读 · 0 评论 -
调整数组顺序使奇数位于偶数前面
#include using namespace std; inline bool IsOdd(int *a) { return *a % 2 == 0; } void Sort(int a[], int len) { if (a == NULL || len == 0) return; else { int *p1 = a, *p2 = a + len - 1; whi原创 2016-04-18 21:21:22 · 395 阅读 · 0 评论 -
重建二叉树
对于一颗二叉树,可以根据先序遍历(后序遍历)和中序遍历重新还原出二叉树。比如前序遍历为{1,2,4,7,3,5,6,8},中序遍历为{4, 7, 2, 1,5,3,8,6}。 根据先序遍历和中序遍历还原二叉树的主要思想: 1、先序遍历序列的第一个元素必定是根节点,可以由此获取二叉树的根节点。 2、根据根节点,在中序遍历序列中查找该节点,由中序遍历的性质可知,中序遍历中该根节点左边的序列必定在原创 2016-04-07 15:23:25 · 373 阅读 · 0 评论 -
两个用大数相加(转化为字符串再相加)
#include #include #include using namespace std; string AddTwoString(string a, string b) { reverse(a.begin(), a.end()); //把a,b翻转,以对齐低位 reverse(b.begin(), b.end()); int sizeA = a.size(); int si原创 2016-04-13 14:46:43 · 494 阅读 · 0 评论 -
打印1到最大的n位数
打印1到最大的n位数,例如n = 2时打印出1,2。。。99 这里用了分治(应该是分治吧。。。),直接贴代码,挺有意思的: #include #include using namespace std; void Print(string s) { for (int i = 0; i != s.size(); ++i) { if (s[i] != '0') { cou原创 2016-04-13 09:59:28 · 257 阅读 · 0 评论 -
各种常见排序函数的C++代码
#include using namespace std; /**********直接插入排序****************/ void InsertSort(int *a, int len) { for (int i = 0; i != len -1; ++i)//i代表已经排好序的元素下标 { int tar = a[i+1]; for (int j = i; j >= 0;原创 2016-04-08 12:45:11 · 575 阅读 · 1 评论 -
回溯反向打印一个数组
反向打印一个数组,最简单就是回溯,当然也可以用栈来实现。上代码: #include using namespace std; void PrintHelp(int *a, int p, int i) { if (p < i - 1)PrintHelp(a, p + 1, i); cout << a[p] << endl; } void Print(int a[], int i) {原创 2016-04-07 10:08:21 · 522 阅读 · 0 评论 -
把字符串中的空格替换成“00”
#include using namespace std; void ReplaceBlank(char* str, int len) { if (str == NULL || len == 0) return; else { int len1 = 0, len2 = 0, blank = 0; for (int i = 0; str[i] != '\0'; ++i) {原创 2016-04-06 22:17:26 · 650 阅读 · 0 评论 -
二维数组面试题(外加创建动态数组)
自己老是忘掉,所以干脆写一个在博客存着: 一维数组: int *x = new int [size]; delete [] x; 二维数组,直接上代码(包括如何把二维数组作为参数传递): #include using namespace std; int colFind(int **a, int row, int col) { for (int i = 0; i != row原创 2016-04-06 15:02:34 · 620 阅读 · 0 评论 -
二叉搜索树BinarySearchTree的实现
这里因为删除节点的函数写得不错,所以代码放上来保存一下,这个函数当然不是我写的。 //BTNode.h #ifndef BTNODE_H #define BTNODE_H #include typedef int datatype; typedef struct BTNode{ datatype data; BTNode* left; BTNode* right; BTNod原创 2016-04-05 01:11:01 · 397 阅读 · 0 评论 -
更一份微信的面试题
1 给定一个递增循环整数数组,最小的整数可能出现在数组的中间,例如, int array[] = {7, 9, 10, 51, 56, 0, 2}; 求查找某个值的算法,给定函数头如下 int find(int array[], int len, int key); 找到了就返回元素下标,没找到就返回-1。 //看到题的第一反应就是用二分查找原创 2016-03-28 14:51:58 · 622 阅读 · 0 评论 -
C写的表达式求值
表达式求值的原理是从这里看来的:http://www.cnblogs.com/mygmh/archive/2012/10/06/2713362.html 先getPostExp()把表达式转为后缀表达式,再用calPostExt()求值 直接贴代码: #include #include #include using namespace std; bool isNum(ch原创 2016-04-02 23:05:34 · 425 阅读 · 0 评论 -
二叉树的总结
//BTNode.h #ifndef BTNODE_H #define BTNODE_H #include typedef int datatype; typedef struct BTNode{ datatype data; BTNode* left; BTNode* right; BTNode(datatype dataPara) :data(dataPara),lef原创 2016-04-01 21:48:07 · 415 阅读 · 0 评论 -
最差情况为线性时间的选择
这个算法写了我好久,在这里记一下。 算法的原理是利用中位数来作为划分元素选择第M小的元素,中位数需要递归自身来求得。算法的最优,平均,最差时间复杂度都为O(N)。相对于随机算法改善了最差时间复杂度。 和快排用了同样的partition,但是这个算法所使用的pivot是确定的,即中位数。 代码版本为golang 1.8.0。 路径goWorkSpace/algorithms/worseLin原创 2017-02-02 13:14:06 · 465 阅读 · 0 评论