自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

烟雨流年

流年匆匆,烟雨如梦!

  • 博客(39)
  • 收藏
  • 关注

原创 Trie树[前缀树,字典树]

Implement a trie with insert, search, and startsWith methods.Note:You may assume that all inputs are consist of lowercase letters a-z.Subscribe to see which companies asked this questi

2016-07-28 20:51:21 251

原创 位向量表示法

#includeusing namespace std;#define BITWORD 32#define SHIFT 5#define MASK 0x1F //(mod32)#define N 1000int a[1+N/BITWORD]; //申请一个内容纳N位的位串void set(int i) //将第i位设置为1{ a[i>>SHIFT]|

2016-07-28 11:32:29 1030

原创 Course Schedule[拓扑排序]

There are a total of n courses you have to take, labeled from 0 to n - 1.Some courses may have prerequisites, for example to take course 0 you have to first take course 1, which is expressed as

2016-07-27 20:58:12 239

原创 败者树

//利用败者树求://20个一维数组,每个数组有500个元素,为叶子节点提供数据。本题中仅给出了测试用的//40个元素,例程中输出最大的前10个元素#include#includeusing namespace std;const int branchesLength=20; //共有20路数组int branches[branchesLength][500]={{

2016-07-27 17:05:37 266

原创 Bitwise AND of Numbers Range

Given a range [m, n] where 0 For example, given the range [5, 7], you should return 4.给定两个数m和n,返回m和n之间所有的数字相与后的结果1.从m到n顺序相与class Solution {public: int rangeBitwiseAnd(int m, int

2016-07-26 17:32:33 249

原创 并查集

#includeusing namespace std;//朋友圈:假如已知有n个人和m对好友关系(存于r中)。如果两个人是直接或者间接的好友,则认为他们属于一个朋友圈//请写程序求出这n个人里一共有多少个朋友圈//假如:n=5,m=3,r={{1,2},{2,3},{4,5}},表示这里有5个人,1和2是好友,2和3是好友,4和5是好友,则//1,2,3属于一个朋友圈,4,5属于另一个

2016-07-25 16:09:29 284

原创 最大和子矩阵

题目描述有一个正整数和负整数组成的NxN矩阵,请编写代码找出元素总和最大的子矩阵。请尝试使用一个高效算法。给定一个int矩阵mat和矩阵的阶数n,请返回元素总和最大的子矩阵的元素之和。保证元素绝对值小于等于100000,且矩阵阶数小于等于200。测试样例:[[1,2,-3],[3,4,-5],[-5,-6,-7]],3返回:10class SubMatr

2016-07-21 13:30:38 478

原创 [编程题]最大子方阵

有一个方阵,其中每个单元(像素)非黑即白(非0即1),请设计一个高效算法,找到四条边颜色相同的最大子方阵。给定一个01方阵mat,同时给定方阵的边长n,请返回最大子方阵的边长。保证方阵边长小于等于100。测试样例:[[1,1,1],[1,0,1],[1,1,1]],3返回:3class SubMatrix {public:    int maxSubMatrix

2016-07-21 11:02:33 1552

原创 字符串变换

题目描述现有一个字典,同时给定字典中的两个字符串s和t,给定一个变换,每次可以改变字符串中的任意一个字符,请设计一个算法,计算由s变换到t所需的最少步数,同时需要满足在变换过程中的每个串都是字典中的串。给定一个string数组dic,同时给定数组大小n,串s和串t,请返回由s到t变换所需的最少步数。若无法变换到t则返回-1。保证字符串长度均小于等于10,且字典中字符串数量小于等

2016-07-20 21:13:55 1980

原创 实时中位数

题目描述现有一些随机生成的数字要将其依次传入,请设计一个高效算法,对于每次传入一个数字后,算出当前所有传入数字的中位数。(若传入了偶数个数字则令中位数为第n/2小的数字,n为已传入数字个数)。给定一个int数组A,为传入的数字序列,同时给定序列大小n,请返回一个int数组,代表每次传入后的中位数。保证n小于等于1000。测试样例:[1,2,3,4,5,6],6返

2016-07-20 20:29:27 952

原创 最长合成字符串

题目描述有一组单词,请编写一个程序,在数组中找出由数组中字符串组成的最长的串A,即A是由其它单词组成的(可重复)最长的单词。给定一个string数组str,同时给定数组的大小n。请返回最长单词的长度,保证题意所述的最长单词存在。测试样例:["a","b","c","ab","bc","abc"],6返回:3bool compare(string str1

2016-07-20 20:12:34 583

原创 单词最近距离

有一篇文章内含多个单词,现给定两个单词,请设计一个高效算法,找出文中这两个单词的最短距离(即最少相隔的单词数,也就是两个单词在文章中位置的差的绝对值)。给定一个string数组article,代表所给文章,同时给定文章的单词数n和待查找的两个单词x和y。请返回两个单词的最短距离。保证两个单词均在文中出现且不相同,同时保证文章单词数小于等于1000。1.class Dista

2016-07-20 19:17:13 668

原创 下一个较大元素

题目描述现在我们有一个int数组,请你找出数组中每个元素的下一个比它大的元素。给定一个int数组A及数组的大小n,请返回一个int数组,代表每个元素比他大的下一个元素,若不存在则为-1。保证数组中元素均为正整数。测试样例:[11,13,10,5,12,21,3],7返回:[13,21,12,12,21,-1,-1]class NextElement {

2016-07-20 17:20:34 761

原创 2的个数

题目描述请编写一个方法,输出0到n(包括n)中数字2出现了几次。给定一个正整数n,请返回0到n的数字中2出现了几次。测试样例:10返回:1class Count2 {public: int countNumberOf2s(int n) { // write code here int div=1;

2016-07-20 15:55:36 416

原创 另类加法

题目描述请编写一个函数,将两个数字相加。不得使用+或其他算数运算符。给定两个int A和B。请返回A+B的值测试样例:1,2返回:3class UnusualAdd {public: int addAB(int A, int B) { // write code here int a=A^B;

2016-07-20 15:17:25 378

原创 树转链表

题目描述有一个类似结点的数据结构TreeNode,包含了val属性和指向其它结点的指针。其可以用来表示二叉查找树(其中left指针表示左儿子,right指针表示右儿子)。请编写一个方法,将二叉查找树转换为一个链表,其中二叉查找树的数据结构用TreeNode实现,链表的数据结构用ListNode实现。给定二叉查找树的根结点指针root,请返回转换成的链表的头指针。/*s

2016-07-20 15:05:43 212

原创 整数对查找

题目描述请设计一个高效算法,找出数组中两数之和为指定值的所有整数对。给定一个int数组A和数组大小n以及需查找的和sum,请返回和为sum的整数对的个数。保证数组大小小于等于3000。测试样例:[1,2,3,4,5],5,6返回:2class FindPair {public: int countPairs(vector A, int n, i

2016-07-20 13:16:50 833

原创 数字发音

题目描述有一个非负整数,请编写一个算法,打印该整数的英文描述。给定一个int x,请返回一个string,为该整数的英文描述。测试样例:1234返回:"One Thousand,Two Hundred Thirty Four"class ToString{public: string toString(int x) { //

2016-07-19 21:09:21 594

原创 最小调整有序

题目描述有一个整数数组,请编写一个函数,找出索引m和n,只要将m和n之间的元素排好序,整个数组就是有序的。注意:n-m应该越小越好,也就是说,找出符合条件的最短序列。给定一个int数组A和数组的大小n,请返回一个二元组,代表所求序列的起点和终点。(原序列位置从0开始标号,若原序列有序,返回[0,0])。保证A中元素均为正整数。测试样例:[1,4,6,5,9,10],6

2016-07-19 19:20:48 907

原创 无判断max

请编写一个方法,找出两个数字中最大的那个。条件是不得使用if-else等比较和判断运算符。给定两个int a和b,请返回较大的一个数。若两数相同则返回任意一个。测试样例:1,2返回:2public int getMax(int a ,int b){ b = a-b;//此时b>>31为1则b小于0即a>31为0 则a>b a- = b&(b>>3

2016-07-19 11:26:55 396

原创 数组中的逆序对

题目描述有一组数,对于其中任意两个数组,若前面一个大于后面一个数字,则这两个数字组成一个逆序对。请设计一个高效的算法,计算给定数组中的逆序对个数。给定一个int数组A和它的大小n,请返回A中的逆序对个数。保证n小于等于5000。测试样例:[1,2,3,4,5,6,7,0],8返回:7//也可以利用上一个题目中求秩的方法,原来求的小于的个数现在可以求大于的

2016-07-18 21:12:48 465

原创 维护x的秩

现在我们要读入一串数,同时要求在读入每个数的时候算出它的秩,即在当前数组中小于等于它的数的个数(不包括它自身),请设计一个高效的数据结构和算法来实现这个功能。给定一个int数组A,同时给定它的大小n,请返回一个int数组,元素为每次加入的数的秩。保证数组大小小于等于5000。测试样例:[1,2,3,4,5,6,7],7返回:[0,1,2,3,4,5,6]//也可以将每次

2016-07-18 20:29:47 463

原创 找出字符串

题目描述有一个排过序的字符串数组,但是其中有插入了一些空字符串,请设计一个算法,找出给定字符串的位置。算法的查找部分的复杂度应该为log级别。给定一个string数组str,同时给定数组大小n和需要查找的string x,请返回该串的位置(位置从零开始)。测试样例:["a","b","","c","","d"],6,"c"返回:3class Finder

2016-07-16 15:52:40 235

原创 元素查找

题目描述有一个排过序的数组,包含n个整数,但是这个数组向左进行了一定长度的移位,例如,原数组为[1,2,3,4,5,6],向左移位5个位置即变成了[6,1,2,3,4,5],现在对于移位后的数组,需要查找某个元素的位置。请设计一个复杂度为log级别的算法完成这个任务。给定一个int数组A,为移位后的数组,同时给定数组大小n和需要查找的元素的值x,请返回x的位置(位置从零开始)。

2016-07-16 15:12:42 418

原创 约瑟夫问题II

题目描述约瑟夫问题是一个著名的趣题。这里我们稍稍修改一下规则。有n个人站成一列。并从头到尾给他们编号,第一个人编号为1。然后从头开始报数,第一轮依次报1,2,1,2...然后报到2的人出局。接着第二轮再从上一轮最后一个报数的人开始依次报1,2,3,1,2,3...报到2,3的人出局。以此类推直到剩下以后一个人。现在需要求的即是这个人的编号。给定一个int n,代表游戏的人数。请

2016-07-14 21:37:35 1123

原创 数组中第k大的数

#include#include#include#includeusing namespace std;#define NUMBER 10//求一个数组中的第k大数字int findKth(int* num,int start,int ended,int k){ if(start==ended&&k==1) return num[start]; i

2016-07-14 20:59:23 450

原创 去除字符串中重复的字符

#include#include#include#includevoid fun(char* str) //将字符串中连续的字符串变成一个{ assert(str!=NULL); int len=strlen(str); int tail=1; int i,j; for( i=1;i<len;i++) { for(j=

2016-07-14 19:30:33 1452

原创 去除字符串中的首尾空格并将连续的空格变为一个

#include#include#include#includevoid fun(char* str) //删除str中头尾空格和中间连续的空格{ assert(str!=NULL); int i=0,j=0; while(str[j]==' ') j++; int len=strlen(str)-1; while(str[l

2016-07-14 16:23:18 1370

原创 约瑟夫问题I

题目描述约瑟夫问题是一个非常著名的趣题,即由n个人坐成一圈,按顺时针由1开始给他们编号。然后由第一个人开始报数,数到m的人出局。现在需要求的是最后一个出局的人的编号。给定两个int n和m,代表游戏的人数。请返回最后一个出局的人的编号。保证n和m小于等于1000。测试样例:5 3返回:41.用链表class Joseph{public: int

2016-07-13 15:09:42 278

原创 Single Number II

Given an array of integers, every element appears three times except for one. Find that single one.class Solution{public: int singleNumber(vector& nums) { //对每一位模拟3进制加法 //one:累加到当前位置是否出现1个

2016-07-12 21:36:26 244

原创 堆箱子

题目描述有一堆箱子,每个箱子宽为wi,长为di,高为hi,现在需要将箱子都堆起来,而且为了使堆起来的箱子不到,上面的箱子的宽度和长度必须大于下面的箱子。请实现一个方法,求出能堆出的最高的高度,这里的高度即堆起来的所有箱子的高度之和。给定三个int数组w,l,h,分别表示每个箱子宽、长和高,同时给定箱子的数目n。请返回能堆成的最高的高度。保证n小于等于500。测试样例:[

2016-07-12 21:05:37 1418

原创 硬币表示

有数量不限的硬币,币值为25分、10分、5分和1分,请编写代码计算n分有几种表示法。给定一个int n,请返回n分有几种表示法。保证n小于等于100000,为了防止溢出,请将答案Mod 1000000007。测试样例:6返回:2暴力方法:void helper(int n,int res,int& count,int a[]){ if(n==3)

2016-07-09 14:28:52 982

原创 最近公共祖先1

题目描述有一棵无穷大的满二叉树,其结点按根结点一层一层地从左往右依次编号,根结点编号为1。现在有两个结点a,b。请设计一个算法,求出a和b点的最近公共祖先的编号。给定两个int a,b。为给定结点的编号。请返回a和b的最近公共祖先的编号。注意这里结点本身也可认为是其祖先。测试样例:2,3返回:1class LCA {public: int getLCA

2016-07-05 20:20:26 671

原创 寻找下一个结点

请设计一个算法,寻找二叉树中指定结点的下一个结点(即中序遍历的后继)。给定树的根结点指针TreeNode* root和结点的值int p,请返回值为p的结点的后继结点的值。保证结点的值大于等于零小于等于100000且没有重复值,若不存在后继返回-1。/*struct TreeNode { int val; struct TreeNode *left; stru

2016-07-05 20:05:17 296

原创 检查是否为BST

题目描述请实现一个函数,检查一棵二叉树是否为二叉查找树。给定树的根结点指针TreeNode* root,请返回一个bool,代表该树是否为二叉查找树。/*struct TreeNode {    int val;    struct TreeNode *left;    struct TreeNode *right;    TreeNode(int

2016-07-05 19:44:59 642

原创 输出单层结点

对于一棵二叉树,请设计一个算法,创建含有某一深度上所有结点的链表。给定二叉树的根结点指针TreeNode* root,以及链表上结点的深度,请返回一个链表ListNode,代表该深度上所有结点的值,请按树上从左往右的顺序链接,保证深度不超过树的高度,树上结点的值为非负整数且不超过100000。(根节点深度为1)/*struct TreeNode { int val; st

2016-07-05 19:23:43 235

原创 二叉树平衡检查

题目描述实现一个函数,检查二叉树是否平衡,平衡的定义如下,对于树中的任意一个结点,其两颗子树的高度差不超过1。给定指向树根结点的指针TreeNode* root,请返回一个bool,代表这棵树是否平衡。/*struct TreeNode { int val; struct TreeNode *left; struct TreeNode *rig

2016-07-05 10:56:41 389

原创 双栈排序

请编写一个程序,按升序对栈进行排序(即最大元素位于栈顶),要求最多只能使用一个额外的栈存放临时数据,但不得将元素复制到别的数据结构中。给定一个int[] numbers(C++中为vector&ltint>),其中第一个元素为栈顶,请返回排序后的栈。请注意这是一个栈,意味着排序过程中你只能访问到第一个元素。测试样例:[1,2,3,4,5]返回:[5,4,3,2,1]

2016-07-04 20:47:35 226

原创 字符串子串翻转

假定我们都知道非常高效的算法来检查一个单词是否为其他字符串的子串。请将这个算法编写成一个函数,给定两个字符串s1和s2,请编写代码检查s2是否为s1旋转而成,要求只能调用一次检查子串的函数。给定两个字符串s1,s2,请返回bool值代表s2是否由s1旋转而成。字符串中字符为英文字母和空格,区分大小写,字符串长度小于等于1000。测试样例:"Hello world","world

2016-07-04 19:18:19 535

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除