題目:某公司有幾萬名員工,請完成一個時間複雜度為O(n)的演算法對該公司員工的年齡作排序,可使用O(1)的輔助空間。分析:排序是面試時經常被提及的一類題目,我們也熟悉其中很多種演算法,諸如插入排序、歸併排序、冒泡排序,快速排序等等。這些排序的演算法,要麼是O(n2)的,要麼是O(nlogn)的。可是這道題竟然要求是O(n)的,這裡面到底有什麼玄機呢? 題目特彆強調是對一個公司的員工的年齡作排序。員工的數目雖然有幾萬人,但這幾萬員工的年齡卻只有幾十種可能。上班早的人一
/********************************* * 日期:2012-6-28 * 作者:SJF0115 * 題號: 九度1010 * 題目:A + B * 結果:AC * 題意: * 總結:**********************************/#include<iostream>#include<stdio.h>#include<string>using namespace
問題:有很多無序的數,從中找出最大的K個數。假定他們都不相等。解法一:如果資料不是很多,例如在幾千個左右,我們可以排一下序,從中找出最大的K個數。排序可以選擇快速排序或者堆排序#include<stdio.h>#include<stdlib.h>int cmp(const void *a,const void *b){return *(int *)a - *(int *)b;}int main(){int n,k;int
/*日期:2011-10-22 作者:xiaosi 題目: 獨木舟上的旅行(貪心)*/#include<iostream>#include<cstdio>#include<stdlib.h>using namespace std;int weight[301];int cmp(const void *a,const void *b){ return *(int *)b-*(int *)a;}int main(){ int N;
/*日期:2011-10-17 作者:xiaosi 題目:會場安排問題(貪心) 題目連結:http://acm.nyist.net/JudgeOnline/problem.php?pid=14*/#include<iostream>#include<cstdio>#include<stdlib.h>using namespace std;struct Activity{ int begin; int end;}A[10000];int
問題:給定一個十進位正整數N,寫下從1開始,到N的所有整數,然後數一下其中出現的所有“1”的個數。例如:N= 2,寫下1,2。這樣只出現了1個“1”。N= 12,我們會寫下1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12。這樣,1的個數是5。問題一:寫一個函數f(N),返回1到N之間出現1的個數,比如f(12)=
/********************************* * 日期:2013-1-11 * 作者:SJF0115 * 題號: 九度1186 * 題目:列印日期 * 來源:http://ac.jobdu.com/problem.php?pid=1186 * 結果:AC * 題意: * 總結: **********************************/ #include <stdio.h>#include
<1>大數相加#include<stdio.h>#include<string.h>char a[10001],b[10001],sum[10002];int BigIntegerAdd(){//兩個數的長度int lena = strlen(a);int lenb = strlen(b);//進位標記int c = 0;int i,j,k;//初始化數組summemset(sum,0,10001);//倒序相加k = 0;for(i = lena-1,j =
題目:輸入一棵二元尋找樹,將該二元尋找樹轉換成一個排序的雙向鏈表。要求不能建立任何新的結點,只調整指標的指向。 比如將二元尋找樹 10 / \ 6 14 /
問題:對於一個位元組(8bit)的變數,求其二進位中1的個數,要求演算法的執行效率儘可能的高。例如把9表示成二進位是1001,有2位是1,因此如果輸入9,1的個數為2。解法一:可以舉一個8位二進位的例子。對於二進位操縱,我們除以一個2,原來數字就會減少一個0(向右移一位)。如果除的過程中有餘,那麼久表示當前位置有一個1。以10100010為例:第一次除以2時,商為1010001,餘為0第二次除以2時,商為101000,餘為1因此,考慮利用整形資料除法的特點,通過相除和判斷餘數的值進行分析。int
題目:定義棧的資料結構,要求添加一個min函數,能夠得到棧的最小元素。要求函數min、push以及pop的時間複雜度都是O(1)。分析:這是去年google的一道面試題。我看到這道題目時,第一反應就是每次push一個新元素時,將棧裡所有逆序元素排序。這樣棧頂元素將是最小元素。但由於不能保證最後push進棧的元素最先出棧,這種思路設計的資料結構已經不是一個棧了。在棧裡添加一個成員變數存放最小元素(或最小元素的位置)。每次push一個新元素進棧的時候,如果該元素比當前的最小元素還要小,則更新最小元素
/*日期:2011-10-20 作者:xiaosi 題目: 刪數問題問題(貪心)*/#include<iostream>#include<cstdio>#include<stdlib.h>using namespace std;struct Num{ char num; int index;}N[201];int cmp(const void *a,const void *b) { struct Num *c = (Num *)a;
/********************************* * 日期:2013-1-12 * 作者:SJF0115 * 題號: 九度1061 * 題目:成績排序 * 來源:http://ac.jobdu.com/problem.php?pid=1061 * 結果:AC * 題意: * 總結:**********************************/#include
/********************************* * 日期:2013-1-12 * 作者:SJF0115 * 題號: 九度1064 * 題目:反序數 * 來源:http://ac.jobdu.com/problem.php?pid=1064 * 結果:AC * 題意: * 總結:**********************************/#include
/*日期:2011-10-20 作者:xiaosi 題目:區間覆蓋問題(貪心)*/#include<iostream>#include<cstdio>#include<stdlib.h>using namespace std;int num[10000];int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;}int main(){ int N;
/********************************* * 日期:2013-1-10 * 作者:SJF0115 * 題號: 九度1096 * 題目:日期差值 * 來源:http://ac.jobdu.com/problem.php?pid=1096 * 結果:AC * 題意: * 總結: **********************************/ #include <stdio.h>int
/*日期:2011-10-20 作者:xiaosi 題目:程式儲存問題(貪心)*/#include<iostream>#include<cstdio>#include<stdlib.h>using namespace std;int program[10000];int cmp(const void *a,const void *b){ return *(int *)a-*(int *)b;}int main(){ int N;
問題:求兩個數的最大公約數解法一:歐幾裡得輾轉相除法:f(x,y) = GCD(x,y), 取k = x / y, b = x % y,則:x = k*y + b;如果一個數能整除x,y,則它也能整除b,y; 而且能整除b,y的數必能整除x,y,即x,y和b,y的公約數是相同的,其最大公約數也是相同的,即f(x,y) = f(y ,x % y) (x>=y>0)例如,計算a = 1071和b =
/********************************* * 日期:2013-1-11 * 作者:SJF0115 * 題號: 九度1043 * 題目:Day of Week * 來源:http://ac.jobdu.com/problem.php?pid=1043 * 結果:AC * 題意: * 總結: **********************************/ #include <stdio.h>
/*日期:2011-10-20 作者:xiaosi 題目:最優服務次序問題(貪心) 題目串連:http://acm.sdut.edu.cn/judgeonline/showproblem?problem_id=1747*/#include<iostream>#include<cstdio>#include<stdlib.h>using namespace std;int Time[1000];int cmp(const void *a,const