给定直方图,每一小块的height由N个非负整数所确定,每一小块的width都为1,请找出直方图中面积最大的矩形。
如下图所示,直方图中每一块的宽度都是1,每一块给定的高度分别是[2,1,5,6,2,3]:
|
| |
| |
| | |
| | | | |
| | | | | |
面积最大值是5和6那个矩形,面积为10
给了A、B两个单词和一个单词集合Dict,每个的长度都相同。
我们希望通过若干次操作把单词A变成单词B,每次操作可以改变单词中的一个字母,同时,新产生的单词必须是在给定的单词集合Dict中。
求所有行得通步数最少的修改方法。
举个例子如下:
Given:
A = "hit"
B = "cog"
Dict = ["hot","dot","dog","lot","log"]
Return
[["hit","hot","dot","dog","cog"],["hit","hot","lot","log","cog"]]
即把字符串A = "hit"转变成字符串B = "cog",有以下两种可能:
"hit" -> "hot" -> "dot" -> "dog" -> "cog"
"hit" -> "hot" -> "lot" -> "log" -> "cog"
回文字符串是指从左到右和从右到左相同的字符串,现给定一个仅由小写字母组成的字符串,你可以把它的字母重新排列,以形成不同的回文字符串。
- 输入:非空仅由小写字母组成的字符串,长度不超过100;
- 输出:能组成的所有回文串的个数(因为结果可能非常大,输出对1000000007取余数的结果)。
例如:
- 输入"aabb"
- 输出为2(因为“aabb”对应的所有回文字符串有2个:abba和baab)
我们要给每个字母配一个1-26之间的整数,具体怎么分配由你决定,但不同字母的完美度不同, 而一个字符串的完美度等于它里面所有字母的完美度之和,且不在乎字母大小写,也就是说字母F和f的完美度是一样的。
现在给定一个字符串,输出它的最大可能的完美度。
例如:dad,你可以将26分配给d,25分配给a,这样整个字符串最大可能的完美度为77。
有两个容器,容积分别为A升和B升,有无限多的水,现在需要C升水。
我们还有一个足够大的水缸,足够容纳C升水。起初它是空的,我们只能往水缸里倒入水,而不能倒出。
可以进行的操作是:
- 把一个容器灌满;
- 把一个容器清空(容器里剩余的水全部倒掉,或者倒入水缸);
- 用一个容器的水倒入另外一个容器,直到倒出水的容器空或者倒入水的容器满。
问是否能够通过有限次操作,使得水缸最后恰好有C升水。
- 输入:三个整数A, B, C,其中 0 < A , B, C <= 1000000000
- 输出:0或1,表示能否达到要求。
本题来自蓝港在线技术团队的idea,详情如下:
XML-可扩展标记语言 ,用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言,被广泛的运用于数据传输和存储。
请编写一段程序,不使用语言之外的开源库,解析对应的XML文件,并把输出结果打印出来。
举个例子如下,当给定下述XML文件时(注:不需要将输入输出格式话,只是举个例子):
<?xml version="1.0" ?>
<Books>
<Book>
<Name = “The C++ Programming Language” Author=”Bjarne Stroustrup” />
</Book>
<Book>
<Name = “Effective C++” Author = “Scott Meyers” />
</Book>
</Books>
它应该输出:
Books
Book 1
Name:The C++ Programming Language
Author:Bjarne Stroustrup
Book 2
Name:Effective C++
Author:Scott Meyers
-
本题输入:简化的一段xml文件,用字符串表示,如下(属性名字不包含引号和等号,也不包含大于小于等特殊字符,详细规则见下面的答题说明)
string in = "<?xml version=\"1.0\" ?><Books><Book><Name = \"The C++ Programming Language\" Author=\"Bjarne Stroustrup\" /></Book><Book><Name = \"Effective C++\" Author = \"Scott Meyers\" /></Book></Books>";
-
本题输出:对输入的xml字符串解析,得到输出如下:
string out = "Books\r\n\tBook 1\r\n\t\tName:The C++ Programming Language\r\n\t\tAuthor:Bjarne Stroustrup\r\n\tBook 2\r\n\t\tName:Effective C++\r\n\t\tAuthor:Scott Meyers";
给定一个字符串,仅由a,b,c 3种小写字母组成。当出现连续两个不同的字母时,你可以用另外一个字母替换它,如:
- 有ab或ba连续出现,你把它们替换为字母c
- 有ac或ca连续出现时,你可以把它们替换为字母b
- 有bc或cb 连续出现时,你可以把它们替换为字母a。
你可以不断反复按照这个规则进行替换,你的目标是使得最终结果所得到的字符串尽可能短,求最终结果的最短长度。
- 输入:字符串。长度不超过200,仅由abc三种小写字母组成。
- 输出: 按照上述规则不断消除替换,所得到的字符串最短的长度。
例如:
-
输入cab,输出2。
因为我们可以把它变为bb或者变为cc
-
输入bcab,输出1。
尽管我们可以把它变为aab -> ac -> b, 也可以把它变为bbb,但因为前者长度更短,所以输出1。
本题来自caopengcs,只要你有兴趣,每个人都可以出题(出题入口在主页右侧边栏“贡献题目”内),以下是题目详情:
给定一个包含1-n的数列,我们通过交换任意两个元素给数列重新排序。
求最少需要多少次交换,能把数组排成按1-n递增的顺序,其中,数组长度不超过100。
例如:
- 原数组是3,2,1, 我们只需要交换1和3就行了,交换次数为1,所以输出1。
- 原数组是2,3,1,我们需要交换2和1,变成1,3,2,再交换3和2,变为1,2,3,总共需要的交换次数为2,所以输出2。
函数头部: C/C++ int run(const int *a,int n);
本题同样来自caopengcs,只要你有兴趣,每个人都可以出题(出题入口在主页右侧边栏“贡献题目”->“我要发布”内),以下是题目详情:
-
子序列的定义:对于一个序列a=a[1],a[2],......a[n],则非空序列a'=a[p1],a[p2]......a[pm]为a的一个子序列
- 其中1<=p1<p2<.....<pm<=n。 例如:4,14,2,3和14,1,2,3都为4,13,14,1,2,3的子序列。
- 对于给出序列a,有些子序列可能是相同的,这里只算做1个
-
要求输出a的不同子序列的数量。
输入:
- 长度为n的数组1<=n<=100,数组元素0<=a[i]<=110
输出:
- 子序列 的个数对1000000007取余数的结果(由于答案比较大,输出Mod 1000000007的结果即可)
1
1 1 1
1 2 3 2 1
1 3 6 7 6 3 1
以上三角形的数阵,第一行只有一个数1, 以下每行的每个数,是恰好是它上面的数,左上的数和右上数等3个数之和(如果不存在某个数,认为该数就是0)。
求第n行第一个偶数出现的位置。如果没有偶数,则输出-1。
例如
- 输入1,则输出-1
- 输入3,则输出2
- 输入4,则输出3。
- 输入n(n <= 1000000000)