题目:在数组中的两个数字如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对。输入一个数组,求出这个数组中的逆序对的总数
例如在数组{7,5,6,4}中,一共存在5对逆序对,分别是{7,6},{7,5},{7,4},{6,4},{5,4}。
看到这个题目,我们的第一反应就是顺序扫描整个数组。每扫描到一个数组的时候,逐个比较该数字和它后面的数字的大小。如果后面的数字比它小,则这两个数字就组...
分类:
编程语言 时间:
2015-08-09 20:46:33
阅读次数:
650
题目:丑数
* 我们把只包含因子2,3,5的数称为丑数(Ugly Number).
* 求按从小到大的顺序的第1500个丑数。
* 例如6,8都是丑数,但14不是,因为它含有因子7.习惯上我们把1当作第一个丑数
方法一:逐个判断每个整数是不是丑数的解法,直观但不够高效:
所谓一个数m是另一个数n的因子,是指n能被m整除,也就是说n%m==0.根据丑数的定义,丑数只能被2,3,5整除...
分类:
编程语言 时间:
2015-08-09 17:16:26
阅读次数:
151
题目:在字符串中找出第一个只出现一次的字符。如输入"abaccdeff",则输出'b'.
看到这样的题目,我们最直观的想法就是从头开始扫描这个字符串中的字符。当访问某个字符时拿这个字符和后面的每个字符相比较,如果在后面没有发现重复的字符,则该字符就是只出现一次的字符。如果字符串有n个字符,每个字符可能与后面的O(n)个字符想比较,因此这种思路的时间复杂度为O(n2),面试官不会满意这种思路,它会...
分类:
编程语言 时间:
2015-08-09 17:14:16
阅读次数:
148
题目:输入一个正整数数组,把数组里面所有的数字拼接排成一个数,打印能拼接出的所有数字中的一个。例如输入数组{3,32,321},则打印出这3个数字能排成的最小数字321323.
这个题目最直接的做法应该是先求出这个数组中的所有数字的全排列,然后把每个排列拼接起来,最后求出排列起来的数字的最小值。求数组的排列和面试题28非常相似。根据排列组合的只是,n个数字总共有n!排列,我们再来看一下更快的算法...
分类:
编程语言 时间:
2015-08-09 12:40:12
阅读次数:
121
题目:输入一个整数n,求从1到n个整数的十进制表示中1出现的次数。例如输入12,从1到12这些整数中包含1的数字有1,10,11,和12,1一共出现了5次。
方法一:不考虑时间效率的解法,靠它拿到Offer有点难:
如果在面试的时候碰到这个问题,应聘者大多能想到最直观的方法,也就是累加1到n中每个整数1出现的次数。我们可疑每次通过对10求余数判断整数的个位数字是不是1.如果这个数字大于10,除...
分类:
编程语言 时间:
2015-08-09 09:33:02
阅读次数:
151
题目:输入一个整型数组,数组里有正数也有负数。数组中一个或连续的多个整数组成一个子数组。
求所有子数组的和的最大值。要求时间复杂度为O(n)
例如输入的数组为{1,-2,3,10,-4,7,2,-5}...
分类:
编程语言 时间:
2015-08-08 22:57:46
阅读次数:
599
题目:输入n个整数,找出其中最小的k个数。例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4...
分类:
编程语言 时间:
2015-08-08 21:23:49
阅读次数:
352
题目:数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字。例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。由于数字2在数组中出现5次,超过数组长度的一半,因此输出2....
分类:
编程语言 时间:
2015-08-08 19:54:07
阅读次数:
134
#includeusing namespace std;int Merge(int *list,int*copy,int s1,int s2,int end){ int i=s1; int j=s2; int k=s1; int num=0; for(int k=s1;...
分类:
其他好文 时间:
2015-08-08 13:23:42
阅读次数:
104
题目:在一个字符串(1。
思路:简单的哈希问题,char占一个字节,8位,最多表示256种字符。时间复杂度O(n),空间复杂度O(1),因为hash数组大小为常数256。只需要遍历一次字符串,然后遍历一次hash数组即可。
我的代码如下:
class Solution {
public:
int FirstNotRepeatingChar(string str...
分类:
其他好文 时间:
2015-08-08 12:12:35
阅读次数:
158