我做这道题,是先用二分查找找到该数字,而后再遍历其前后相同的数字,统计次数。这种做法的平均时间复杂度为O(logn),最坏情况下为O(n),剑指offer上给的思路是两次用二分查找分别找到该数字第一次和最后一次出现的位置,这样的时间复杂度平均和最坏都是O(logn),稍好些》
    下面贴上我按照自己思路写的代码:...
                            
                            
                                分类:
其他好文   时间:
2014-06-07 01:19:45   
                                阅读次数:
197
                             
                    
                        
                            
                            
                                题目描述:
JOBDU最近来了一个新员工Fish,每天早晨总是会拿着一本英文杂志,写些句子在本子上。同事Cat对Fish写的内容颇感兴趣,有一天他向Fish借来翻看,但却读不懂它的意思。例如,“student. a am I”。后来才意识到,这家伙原来把句子单词的顺序翻转了,正确的句子应该是“I am a student.”。Cat对一一的翻转这些单词顺序可不在行,你能帮助他么?
输入:
每个测试案例为一行,表示一句英文句子。
我们保证一个句子的单词数不会超过600,每个单词的长度也不会超过30。但是需要注...
                            
                            
                                分类:
其他好文   时间:
2014-06-05 10:52:19   
                                阅读次数:
202
                             
                    
                        
                            
                            
                                这道题之前在Cracking the Coding interview上做过类似的,一样的三次反转,即可得到,时间复杂度为O(n),空间复杂度为O(1)。这道题在九度OJ上测试,主要要考虑移动的位数大于字符串长度时的情况,取余即可。...
                            
                            
                                分类:
其他好文   时间:
2014-06-05 09:34:36   
                                阅读次数:
236
                             
                    
                        
                            
                            
                                题目来源:Light OJ 1258 Making Huge Palindromes
题意:末尾添加最少的字符是使输入的串变成回文 输出长度
思路:直接KMP匹配出它和它反串的最大匹配 n减去它就是要添加的数量
#include 
#include 
#include 
using namespace std;
const int maxn = 1000010;
char a[maxn], ...
                            
                            
                                分类:
其他好文   时间:
2014-06-05 01:14:56   
                                阅读次数:
240
                             
                    
                        
                            
                            
                                查询成绩
Accepted : 52
 
Submit : 275
Time Limit : 3000 MS
 
Memory Limit : 65536 KB
题目描述
波波同学是位大四的学生,同时也是一位考研er。为了考上北京邮电大学,他准备了很长时间。不久前,考研成绩终于公布了。波波登陆了成绩查询...
                            
                            
                                分类:
其他好文   时间:
2014-06-05 00:36:06   
                                阅读次数:
373
                             
                    
                        
                            
                            
                                题目来源:Light OJ 1102 Problem Makes Problem
题意:一个整数n分解成k个数相加有多少种方案 数字可以重复 
思路:m个苹果放n个盒子有多少方案 允许盒子有空 盒子空对应0 答案是C(n+m-1, n-1) 
首先如果不允许有空 答案是C(m-1, n) 插空法m个苹果有m-1个空档 在这m-1个空档里选n-1个分成了n部分 每部分都不是空的
现在允许为空...
                            
                            
                                分类:
其他好文   时间:
2014-06-04 21:57:03   
                                阅读次数:
166
                             
                    
                        
                            
                            
                                思路:最简单的方法是顺序数组,将每个数字与后面的比较,统计逆序对的个数,这种方法的时间复杂度为O(n*n),这种方法写出的代码在九度OJ上测试,会超时。剑指offer给出了归并排序的思路,这个有点难想到啊,也可能是我太弱了,根本没往这方面想!理解了思路,就不难了,将数组划分成两个子数组,再将子数组分别划分成两个子数组,统计每个子数组内的逆序对个数,并将其归并排序,再统计两个子数组之间的逆序对个数,并进行归并排序。这就是归并排序的变种,在归并排序代码的基础上稍作改进即可。
    合理还要注意一点:全局变量c...
                            
                            
                                分类:
其他好文   时间:
2014-06-03 03:14:36   
                                阅读次数:
239
                             
                    
                        
                            
                            
                                思路:最简单的方法就是先通过将一个数不断除以2,3,5来判定该数是不是丑数,而后在从1开始,依次往后判断每个数是不是丑数,并记下丑数的个数,这样当计算的个数为给定值时,便是需要求的第n个丑数,这种方法的时间复杂度为O(k),这里的k为第n个丑数的大小,比如第1500个丑数的大小为859963392,那么就需要判断859963392次,时间效率非常低。
    直观的优化措施就是看能不能将时间复杂度降低到O(n),即只在丑数上花时间,而不在非丑数上浪费时间。剑指offer上给的思路很好,用O(n)的辅助空间来...
                            
                            
                                分类:
其他好文   时间:
2014-06-03 02:37:53   
                                阅读次数:
176
                             
                    
                        
                            
                            
                                思路:我们先写一个函数,求出从1到整数n之间1出现的次数,而后分别将要求输入的两个数(具体说,应该是最大的数,和最小的数减去1)作为参数传入该函数,得到的值相减,即可得到二者之间的的数中1出现的次数。
    最简单的方法,分别求从1到n之间每个数中的1的个数,由于整数n的位数为O(logn),我们要判断一个数有多少个1,需要判断其每一位是否为1,这样一个数就需要判断O(logn)次,而总共有n个数需要求,那么该方法的时间复杂度为O(nlogn)。在九度OJ上用该方法写的代码测试,会超时。
    剑指of...
                            
                            
                                分类:
其他好文   时间:
2014-06-03 01:43:22   
                                阅读次数:
282
                             
                    
                        
                            
                            
                                OJ题目:click here~~
题目分析:输出第k个素数
贴这么简单的题目,目的不纯洁
用筛法求素数的基本思想是:把从1开始的、某一范围内的正整数从小到大顺序排列, 1不是素数,首先把它筛掉。剩下的数中选择最小的数是素数,然后去掉它的倍数。依次类推,直到筛子为空时结束。如有:
1 2 3 4 5 6 7 8 9 10
11 12 13 14 15...
                            
                            
                                分类:
其他好文   时间:
2014-06-03 01:31:03   
                                阅读次数:
233