程式員面試題精選100題(57)-O(n)時間的排序[演算法]

題目:某公司有幾萬名員工,請完成一個時間複雜度為O(n)的演算法對該公司員工的年齡作排序,可使用O(1)的輔助空間。分析:排序是面試時經常被提及的一類題目,我們也熟悉其中很多種演算法,諸如插入排序、歸併排序、冒泡排序,快速排序等等。這些排序的演算法,要麼是O(n2)的,要麼是O(nlogn)的。可是這道題竟然要求是O(n)的,這裡面到底有什麼玄機呢?                題目特彆強調是對一個公司的員工的年齡作排序。員工的數目雖然有幾萬人,但這幾萬員工的年齡卻只有幾十種可能。上班早的人一

九度1010 A + B

/********************************* * 日期:2012-6-28 * 作者:SJF0115 * 題號: 九度1010 * 題目:A + B * 結果:AC * 題意: * 總結:**********************************/#include<iostream>#include<stdio.h>#include<string>using namespace

編程之美讀書筆記(4)尋找最大的K個數

問題:有很多無序的數,從中找出最大的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

編程之美讀書筆記(3) 統計在從1到n的正整數中1出現的次數

問題:給定一個十進位正整數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)=

九度1186 列印日期

/********************************* * 日期:2013-1-11 * 作者:SJF0115 * 題號: 九度1186 * 題目:列印日期 * 來源:http://ac.jobdu.com/problem.php?pid=1186 * 結果:AC * 題意: * 總結: **********************************/ #include <stdio.h>#include

編程之美讀書筆記(2)大數問題(高精度運算)

<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 =

程式員面試題精選100題(01)-把二元尋找樹轉變成排序的雙向鏈表[資料結構]

題目:輸入一棵二元尋找樹,將該二元尋找樹轉換成一個排序的雙向鏈表。要求不能建立任何新的結點,只調整指標的指向。  比如將二元尋找樹                                            10                                          /    \                                        6       14                                      / 

編程之美讀書筆記(1)位元中1的個數

問題:對於一個位元組(8bit)的變數,求其二進位中1的個數,要求演算法的執行效率儘可能的高。例如把9表示成二進位是1001,有2位是1,因此如果輸入9,1的個數為2。解法一:可以舉一個8位二進位的例子。對於二進位操縱,我們除以一個2,原來數字就會減少一個0(向右移一位)。如果除的過程中有餘,那麼久表示當前位置有一個1。以10100010為例:第一次除以2時,商為1010001,餘為0第二次除以2時,商為101000,餘為1因此,考慮利用整形資料除法的特點,通過相除和判斷餘數的值進行分析。int

程式員面試題精選100題(02)-設計包含min函數的棧[資料結構]

題目:定義棧的資料結構,要求添加一個min函數,能夠得到棧的最小元素。要求函數min、push以及pop的時間複雜度都是O(1)。分析:這是去年google的一道面試題。我看到這道題目時,第一反應就是每次push一個新元素時,將棧裡所有逆序元素排序。這樣棧頂元素將是最小元素。但由於不能保證最後push進棧的元素最先出棧,這種思路設計的資料結構已經不是一個棧了。在棧裡添加一個成員變數存放最小元素(或最小元素的位置)。每次push一個新元素進棧的時候,如果該元素比當前的最小元素還要小,則更新最小元素

刪數問題問題(貪心) 求測試資料(Wrong)

/*日期: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;  

九度1061 成績排序

/********************************* * 日期:2013-1-12 * 作者:SJF0115 * 題號: 九度1061 * 題目:成績排序 * 來源:http://ac.jobdu.com/problem.php?pid=1061 * 結果:AC * 題意: * 總結:**********************************/#include

九度1064 反序數

/********************************* * 日期: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;   

九度1096 日期差值

/********************************* * 日期: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;   

編程之美讀書筆記(5)最大公約數

問題:求兩個數的最大公約數解法一:歐幾裡得輾轉相除法: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 =

九度1043 Day of Week

/********************************* * 日期: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

總頁數: 61357 1 .... 20448 20449 20450 20451 20452 .... 61357 Go to: 前往

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.