牛客网学习
ranjiewen
坚持阅读,坚持练习,日积月累! 金风玉露一相逢,便胜却人间无数!
展开
-
字符串旋转(str.find()---KMP)
此题旋转带有技巧性,问题转化为常见的问题,熟练STL可以直接用str.find()函数,其是主要想用KMP算法实现字符串的查找算法。。。//如果对于一个字符串A,将A的前面任意一部分挪到后边去形成的字符串称为A的旋转词。比如A = "12345", A的旋转词有"12345", "23451", "34512", "45123"和"51234"。对于两个字符串A和B,请判断A和B是否互为旋原创 2016-09-20 14:17:00 · 744 阅读 · 0 评论 -
冒泡排序
对于一个int数组,请编写一个冒泡排序算法,对数组元素排序。给定一个int数组A及数组的大小n,请返回排序后的数组。 测试样例:[1,2,3,5,2,3],6[1,2,2,3,3,5]class BubbleSort {public: int* bubbleSort(int* A, int n) { // write code here原创 2016-09-20 14:05:24 · 214 阅读 · 0 评论 -
2016网易研发题目
前段时间做的,现在整理一下,方便以后复习!//小易经常沉迷于网络游戏.有一次, 他在玩一个打怪升级的游戏, 他的角色的初始能力值为 a.//在接下来的一段时间内, 他将会依次遇见n个怪物, 每个怪物的防御力为b1, b2, b3...bn.//如果遇到的怪物防御力bi小于等于小易的当前能力值c, 那么他就能轻松打败怪物, 并 且使得自己的能力值增加bi; //如果bi大于c,原创 2016-09-20 14:05:26 · 202 阅读 · 0 评论 -
华为上机测试题
练习了一些华为上机测试的题目,打算后面多学习算法的部分,以后再更新了。这里奉献3题,还有部分在github上,分类和博客差不多,欢迎star和fork,大家共同学习!//题目描述////密码要求 :////1.长度超过8位////2.包括大小写字母.数字.其它符号, 以上四种至少三种////3.不能有相同长度超2的子串重复////说明:长度超过2原创 2016-09-20 14:05:29 · 791 阅读 · 0 评论 -
Trie树也称字典树
Trie树 Trie树也称字典树,因为其效率很高,所以在在字符串查找、前缀匹配等中应用很广泛,其高效率是以空间为代价的。一.Trie树的原理 利用串构建一个字典树,这个字典树保存了串的公共前缀信息,因此可以降低查询操作的复杂度。 下面以英文单词构建的字典树为例,这棵Trie树中每个结点包括26个孩子结点,因为总共有26个英文字母(假设单词都是小写字母组成)。原创 2016-09-20 14:06:14 · 190 阅读 · 0 评论 -
链表回文串判断&&链式A+B
有段时间没有练习了,链表回文串判断用到了栈。链式A+B将没有的项用0补充。链表有没有头节点,及结点和链表的区别,即pNode和pHead。//#include//using namespace std;////class Base {//public:// Base(int j) : i(j) {}// virtual~Base() {}// void fun原创 2016-09-20 14:06:45 · 283 阅读 · 0 评论 -
集合栈
对入栈和出栈操作,top都需要相应加减,对一些条件的判断。/****************************************************** \file SetOfStacks.cpp* \date 2016/05/05 17:49* \问题描述:请实现一种数据结构SetOfStacks,由多个栈组成,其中每个栈的大小为size,当前一个栈填原创 2016-09-20 14:06:48 · 181 阅读 · 0 评论 -
对栈元素排序
对栈元素排序,借助另外一个栈,主要是对vector的尾部进行操作。/****************************************************** \file twoStacksSort.cpp* \date 2016/05/07 23:58* \问题描述:请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的原创 2016-09-20 14:06:53 · 661 阅读 · 0 评论 -
猫狗收养所
两种方法实现,用两个vector实现,一个为领养的动物(输出),一个为收养的动物(输入);用两个queue实现(都为输入),一个为收养的猫,一个收养的狗,vetor(输出)。/****************************************************** \file CatDogAsylum.cpp* \date 2016/05/09 15:19原创 2016-09-20 14:07:05 · 438 阅读 · 0 评论 -
网易实习生真题(二叉树)
2016.3月的网易实习生机试题,考察了的对二叉树的灵活应用,理解中序遍历的用处!可能还有优化的解,大家自由发挥!//有一棵二叉树,树上每个点标有权值,权值各不相同,请设计一个算法算出权值最大的叶节点到权值最小的叶节点的距离。//二叉树每条边的距离为1,一个节点经过多少条边到达另一个节点为这两个节点之间的距离。//给定二叉树的根节点root,请返回所求距离。#inclu原创 2016-09-20 14:05:04 · 221 阅读 · 0 评论 -
网易实习笔试真题C/C++
刚做的时候根本就没有想到解题思路,刚好看到了别人的思路,自己写了一下。里面对unordered_map及vector二维数组的建立很灵活,另外区别了一下map,unordered_map,hash_map;但是没有弄清楚unordered_map,hash_map的区别。以后遇到了在细细研究。另一个关于二叉树的笔试真题:http://www.cnblogs.com/ranjiewen/p/53原创 2016-09-20 14:04:38 · 594 阅读 · 0 评论 -
二分查找法的实现和应用汇总
二分查找法的实现和应用汇总 在学习算法的过程中,我们除了要了解某个算法的基本原理、实现方式,更重要的一个环节是利用big-O理论来分析算法的复杂度。在时间复杂度和空间复杂度之间,我们又会更注重时间复杂度。时间复杂度按优劣排差不多集中在:O(1), O(log n), O(n), O(n log n), O(n2), O(nk), O(2n)到目前位置,似乎我学到的算原创 2016-09-20 14:02:27 · 502 阅读 · 0 评论 -
牛课--C/C++
引用是除指针外另一个可以产生多态效果的手段。 1 //引用是除指针外另一个可以产生多态效果的手段。 2 #include 3 using namespace std; 4 class A 5 { 6 public: 7 virtual void print() 8 { 9 cout"A"endl;10 }11 };12 class B:原创 2016-09-20 14:02:41 · 248 阅读 · 0 评论 -
剑指offer
今天完成了剑指offer上的66道编程题,感觉自己还是很多代码实现能力和算法积累都还不够!还需要继续联系,坚持自己独立写代码实现。最后将今天的两道题目奉上,都有异曲同工之妙:矩阵中的路径:#include//题目描述////请设计一个函数,用来判断在一个矩阵中是否存在一条包含某字符串所有字符的路径。//路径可以从矩阵中的任意一个格子开始,每一步可以在矩阵中向左,原创 2016-09-20 14:02:44 · 210 阅读 · 0 评论 -
二叉树的遍历--递归+非递归
二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的。对于二叉树,有前序、中序以及后序三种遍历方法。因为树的定义本身就是递归定义,因此采用递归的方法去实现树的三种遍历不仅容易理解而且代码很简洁。而对于树的遍历若采用非递归的方法,就要采用栈去模拟实现。在三种遍历中,前序和中序遍历的非递归算法都很容易实现,非递归后序遍历实现起来相对来说原创 2016-09-20 14:02:46 · 238 阅读 · 0 评论 -
while (cin>>str)退出死循环
今天在练习的时候突然发现了这个问题,百度之感觉还挺常见的,故记之! //题目描述////写出一个程序,接受一个十六进制的数值字符串,输出该数值的十进制字符串。////输入描述 ://输入一个十六进制的数值字符串。//////输出描述 ://输出该数值的十进制字符串。#include #includestring>using na原创 2016-09-20 14:02:55 · 552 阅读 · 0 评论 -
交换两个变量的思考
网上存在三种方法: 1) 算术运算 简单来说,就是通过+和-运算来实现。代码如下:int a,b;a=10;b=12;a=b-a; //a=2;b=12b=b-a; //a=2;b=10a=b+a; //a=12;b=10 通过以上运算,a和b中的值就进行了交换。表面上看起来很简单,但是不容易想到,尤其是在习惯标准算法之后。原创 2016-09-20 14:04:02 · 290 阅读 · 0 评论 -
翻转字符串和比较两个字符串是否相同
奉献两个小题,练习继续://题目描述////请实现一个算法,在不使用额外数据结构和储存空间的情况下,翻转一个给定的字符串(可以使用单个过程变量)。//给定一个string iniString,请返回一个string,为翻转后的字符串。保证字符串的长度小于等于5000。//测试样例://"This is nowcoder"//返回:"redocwon si sihT"原创 2016-09-20 14:04:05 · 400 阅读 · 0 评论 -
压缩字符串
//利用字符重复出现的次数,编写一个方法,实现基本的字符串压缩功能。比如,字符串“aabcccccaaa”经压缩会变成“a2b1c5a3”。//若压缩后的字符串没有变短,则返回原先的字符串。//给定一个string iniString为待压缩的串(长度小于等于3000),保证串内字符均由大小写英文字母组成,返回一个string,//为所求的压缩后或未变化的串。#includeu原创 2016-09-20 14:04:21 · 292 阅读 · 0 评论 -
平衡二叉树的判断
上一周回家了一趟,家里很忙,一段时间都没有贡献了。对于平衡二叉树的判断,貌似剑指offer里面也有,对树的深度用递归的思想,为左右子树加1即可,方法一一般思路,方法二用引用返回树的高度不容易。//题目描述////实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。//给定指向树根结点的指针TreeNode* root,请返回一个原创 2016-09-20 14:07:24 · 319 阅读 · 0 评论 -
offer--链表反转和从尾到头打印链表
这个是高频的面试题,今天总结了一些。反转链表用三个指针实现,返回新链表的头节点;而从尾到头打印,应用栈实现,返回vector整个链表。//题目描述////输入一个链表,反转链表后,输出链表的所有元素。struct ListNode{ int val; struct ListNode *next; ListNode(int x) :val(x原创 2016-09-20 14:07:29 · 333 阅读 · 0 评论 -
回文链表
回文链表其实也是链表反转的变形;也可以用栈实现。//对于一个链表,请设计一个时间复杂度为O(n), 额外空间复杂度为O(1)的算法,判断其是否为回文结构。//给定一个链表的头指针A,请返回一个bool值,代表其是否为回文结构。保证链表长度小于等于900。//测试样例://1->2->2->1//返回:true#include #include using n原创 2016-09-20 14:09:41 · 256 阅读 · 0 评论 -
满二叉树的最近公共祖先
满二叉树节点父子之间的关系。//题目描述////有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b。//请设计一个算法,求出a和b点的最近公共祖先的编号。//给定两个int a, b。为给定结点的编号。请返回a和b的最近公共祖先的编号。注意这里结点本身也可认为是其祖先。//测试样例://2,3//返回:1原创 2016-09-20 14:10:04 · 814 阅读 · 0 评论 -
创建二叉树求叶子节点个数
求二叉树叶子结点的个数,注意创建方法!//求二叉树中叶子结点的个数#include#define N 63using namespace std;char str[] = "ab#d##c#e##"; //先建立根节点,然后再左右结点建立int i = -1;typedef struct node{ struct node *left原创 2016-09-20 14:12:40 · 1034 阅读 · 0 评论 -
两个字符串的最长连续公共子串
LCS(Longest Common Subsequence) 就是求两个字符串最长公共子串的问题。引入:LCS(Longest Common Subsequence) 就是求两个字符串最长公共子串的问题。比如: String str1 = new String("adbccadebbca"); String str2 = new String("edabccadece");str原创 2016-09-20 14:16:18 · 1950 阅读 · 0 评论 -
单链表的实现
学习编程也有一段时间了,但是总是感觉,自己缺少一些什么东西。编程一味的学习照着别人写的习惯,没有自己的思想,是不能有质的提升的。总是感觉自己不能做什么,对待代码还是缺少基本的实现的能力,更不用说什么技巧算法了。还需要的大量的联系。 我打算好好把数据结构的算法,实现以下,总是感觉自己,看起来会了,但是实际动手机就写不出来了。 自己只有不断的总结,把该记住的东西理解了,才能得心应手原创 2016-09-20 14:16:33 · 450 阅读 · 0 评论 -
最大公倍数
华为机试题,以前做过,复习了一点思路。//题目描述////正整数A和正整数B 的最小公倍数是指 能被A和B整除的最小的正整数值,设计一个算法,求输入A和B的最小公倍数。////输入描述 ://输入两个正整数A和B。//////输出描述 ://输出A和B的最小公倍数。////输入例子 ://5//7////输出例子 ://原创 2016-09-20 14:16:38 · 1254 阅读 · 0 评论 -
位运算---整数间的转化
此题巧妙地转为熟悉的的求一个数中1的个数,告诉我们一些看似不熟悉的题目其实认真想想可以转为化我们熟悉的题目。//题目描述////编写一个函数,确定需要改变几个位,才能将整数A转变成整数B。//给定两个整数int A,int B。请返回需要改变的数位个数。//测试样例://10, 5//返回:4//思路:A 需要变换 多少位 才能得到B,位变换无非就是0原创 2016-09-20 14:16:40 · 499 阅读 · 0 评论 -
层次遍历二叉树
层次遍历二叉树,编程之美上看过解法,然后在练习了一下。用递归和vector,队列实现了,然后加上了测试函数,测试函数的二叉树创建方法待改进。//有一棵二叉树,请设计一个算法,按照层次打印这棵二叉树。//给定二叉树的根结点root,请返回打印结果,结果按照每一层一个数组进行储存,所有数组的顺序按照层数从上往下,且每一层的数组内元素按照从左往右排列。保证结点数小于等于500。#in原创 2016-09-20 14:16:52 · 847 阅读 · 0 评论 -
矩阵的操作
矩阵的之字打印,顺时针旋转90,顺时针打印操作。。。//题目描述////对于一个矩阵,请设计一个算法,将元素按“之”字形打印。具体见样例。//给定一个整数矩阵mat,以及他的维数nxm,请返回一个数组,其中元素依次为打印的数字。//测试样例://[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12]], 4, 3//返回:[1,原创 2016-09-20 14:09:31 · 312 阅读 · 0 评论 -
Treap树
Treap树算是一种简单的优化策略,这名字大家也能猜到,树和堆的合体,其实原理比较简单,在树中维护一个"优先级“,”优先级“采用随机数的方法,但是”优先级“必须满足根堆的性质,当然是“大根堆”或者“小根堆”都无所谓,比如下面的一棵树:从树中我们可以看到:①:节点中的key满足“二叉查找树”。②:节点中的“优先级”满足小根堆。 一棵treap是一棵修改了结点顺序原创 2016-09-20 14:09:12 · 307 阅读 · 0 评论 -
链表求差
链表指针参数和逻辑的分析。//已知集合A和B的元素分别用不含头结点的单链表存储,函数difference()用于求解集合A与B的差集,并将结果保存在集合A的单链表中。//例如,若集合A = { 5, 10, 20, 15, 25, 30 },集合B = { 5, 15, 35, 25 },完成计算后A = { 10, 20, 30 }。#include#includes原创 2016-09-20 14:07:34 · 342 阅读 · 0 评论 -
检查图中的有向路径
对于图的操作,貌似这是第一次遇到,剑指offer里面貌似没有,对图的数据结构和表示有了一定的了解。 1 /***************************************************** 2 * \file Path.cpp 3 * \date 2016/05/30 15:03 4 5 * \问题描述: 6 对于一个有向图,请实现一个算法,找原创 2016-09-20 14:07:43 · 418 阅读 · 0 评论 -
最小高度的BST
加深对BST的构建过程及递归思想的理解。/****************************************************** \file MinimalBST.cpp* \date 2016/05/30 16:00* \问题描述:对于一个元素各不相同且按升序排列的有序序列,请编写一个算法,创建一棵高度最小的二叉查找树。给定一个有序序列int原创 2016-09-20 14:07:46 · 253 阅读 · 0 评论 -
输出树的单层节点
理解题意,注意链表创建和树的层次遍历。/****************************************************** \file TreeLevel.cpp* \date 2016/05/31 17:05* \问题描述:对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。给定二叉树的根结点指针TreeNode* root原创 2016-09-20 14:07:55 · 569 阅读 · 0 评论 -
字符串的变形
这道题很多字符串的边界问题,涉及到空格,反转的问题。很麻烦,记得以前只做过类似的题,应该有简单的方法,但没有找到,以后再看看。//对于一个给定的字符串,我们需要在线性(也就是O(n))的时间里对它做一些变形。首先这个字符串中包含着一些空格,//就像"Hello World"一样,然后我们要做的是把着个字符串中由空格隔开的单词反序,同时反转每个字符的大小写。//比如"Hello Wo原创 2016-09-20 14:08:05 · 371 阅读 · 0 评论 -
地域划分
理解题意,一些控制条件判断。//现在有一块长条形的土地,这个土地我们可以看成是由n块小方格连接而成的(这些小方格我们可以将之编号为1到n)。//而我们需要将其划分成两个部分,分别种上不同的作物(即作物A和B),划分必须在某两个小方格之间进行,或者在土地的最左端或最右端,//若划分在第i块到第i + 1块间进行,则划分后,第1至第i块地种A,剩下的地种B。现在有一些专家对土地进行了检原创 2016-09-20 14:08:09 · 265 阅读 · 0 评论 -
二叉树单色路径最长&&穿珠子
对树的操作,特别理解递归的好处。//对于一棵由黑白点组成的二叉树,我们需要找到其中最长的单色简单路径,其中简单路径的定义是从树上的某点开始沿树边走不重复的点到树上的//另一点结束而形成的路径,而路径的长度就是经过的点的数量(包括起点和终点)。而这里我们所说的单色路径自然就是只经过一种颜色的点的路径。//你需要找到这棵树上最长的单色路径。//给定一棵二叉树的根节点(树的点数小于等原创 2016-09-20 14:08:11 · 429 阅读 · 0 评论 -
判断是否为BST
递归的方法,用返回false的方法。中序遍历的想法很好,空间浪费。遍历的过程记录上一次的值进行比较。//题目描述////请实现一个函数,检查一棵二叉树是否为二叉查找树。//给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。#includeusing namespace std;struct TreeNode {原创 2016-09-20 14:08:33 · 575 阅读 · 0 评论 -
快速排序的理解
//快速排序实现方法一void quick_sort(int s[],int l,int r)//先去第一个元素作为基准,从后面比较{ int i = l, j = r, base = s[i];//挖坑 while (ibase) { j--; } if (ij) { s[i++] = s[j];原创 2016-09-20 14:02:07 · 377 阅读 · 0 评论