![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
数据结构与算法
文章平均质量分 55
碎碎是个老司机
你的GTR不克服抬头过重的问题,是赢不了的我的86的
展开
-
16年华为春季实习生机试题
给出一个字符串形式表达的二叉树,求出指定节点深度。输入的树形结构字符串格式为:1、以父节点、左子树、右子树表示的二叉树;每个父节点不会超过两个子节点;2、树的每一个节点采用单个字母表示;树的层次采用数字表示,树根的层次为1,下一层为2,不会超过9层;3、字符串以“节点名称 层次数 节点名称 层次数…”的形式出现,同一个父节点下,先出现的为左子树。例如字符串“原创 2016-03-31 16:17:12 · 568 阅读 · 0 评论 -
基数排序
基数排序,是基于计数排序的稳定排序。对于元素的每一位进行排序,例如十进制的101,100,111从个位先计数排序,再十位计数排序,最后百位上计数排序。当然也并一定是按十进制来进行排序,可以按任何进制进行排序。时间复杂度为O(k * n),k为位数;空间复杂度为O(radix + n),radix为计数所用的桶,比如10进制为10,十六进制为16。golang代码如下:package原创 2017-02-06 13:53:04 · 441 阅读 · 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 · 382 阅读 · 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 · 359 阅读 · 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 · 481 阅读 · 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 · 244 阅读 · 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 · 558 阅读 · 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 · 489 阅读 · 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 · 628 阅读 · 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 · 597 阅读 · 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 · 384 阅读 · 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 · 615 阅读 · 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 · 412 阅读 · 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 · 399 阅读 · 0 评论 -
最差情况为线性时间的选择
这个算法写了我好久,在这里记一下。算法的原理是利用中位数来作为划分元素选择第M小的元素,中位数需要递归自身来求得。算法的最优,平均,最差时间复杂度都为O(N)。相对于随机算法改善了最差时间复杂度。和快排用了同样的partition,但是这个算法所使用的pivot是确定的,即中位数。代码版本为golang 1.8.0。路径goWorkSpace/algorithms/worseLin原创 2017-02-02 13:14:06 · 449 阅读 · 0 评论