030day(通過例題了解程式時間複雜度)

2021-08-10 14:47:19 字數 1111 閱讀 6902

《2023年11月9日》[連續030天]

內容:a. 

a.輸入n(n<=100,000)個整數,找出其中的兩個數,它們之和等於整數m(假定肯定有解)。題中所有整數都能用int表示:

思路:解法1:兩重迴圈,列舉,複雜度是o(n^2);大約為100億,超時!

解法2:

1)將陣列排序,複雜度是o(n*log(n))底數是2;

2)  對陣列中的每個元素a[i],在陣列中二分查詢m-a[i]。複雜度是log(n),最壞查詢n-2,這部分的複雜度也是o(n*log(n)) ;

解法3:

1)將陣列排序,複雜度是o(n*log(n));

2)  查詢的時候,設定兩個變數i和j,i初值說0,j初值是n-1.看a[i]+a[j],如果大於m,就讓j-1,如果小於m,就讓i+1;,直至a[i]+a[j]=m;

總複雜度說o(n*log(n));

b.農夫john建造了一座長畜欄,它包括n(2<=n<=100,000)個隔間,這些小隔間的位置為x(0),.....,x(n-1)(0<=x(i)<=1,000,000,000)

john的c(2<=c<=n)頭牛每頭到乙個隔間。使任意兩頭牛之間的最小距離經可能大,則最大的最小距離說多少?(百練 2456)

總時間限制: 

1000ms 

記憶體限制: 

65536kb

思路:解法1:

1)排序;

2)把第一頭放在x(0);

3)若第k頭牛放在x(i), 則找到x(i+1)到x(n-1)中第乙個位於[x(i)+d,1,000,000,000]中的x(j),第k+1頭牛放在x(j)。找不到,就d=d-1,轉2)重複;

複雜度  1,000,000,000/c*n,即 1,000,000,000,超時!

解法2:

1)排序;

2)在[l,r]內用二分法嘗試「最大最近距離」d=(l+r)/2(l,r初值為[1,  1,000,000,000/c])

若d可行,則記住該d,然後在新[l,r]中繼續嘗試(l=d+1)

若 d不可行,則在新[l,r]中繼續嘗試(r=d-1)

複雜度 log(1,000,000,000/c)*n;

明日計畫:學習stl排序演算法sort;

Day030 Linux常用的命令 1

a 一切皆檔案 b 配置檔案儲存為純文字格式 2.互動的方式 介面 cli介面 3.1 cd change directory cd 改變當前目錄到指定目錄 3.2 pwd printing working directory pwd 列印當前的工作目錄 3.3 ls list ls 檢視當前目錄的...

03 0 超速判斷 10

時間限制 400 ms 記憶體限制 65536 kb 長度限制 8000 b 判題程式 standard 作者 楊起帆 浙江大學城市學院 模擬交通警察的雷達測速儀。輸入汽車速度,如果速度超出60 mph,則顯示 speeding 否則顯示 ok 輸入格式 輸入在一行中給出1個不超過500的非負整數,...

030 反射的理解

1.如果明確的知道乙個類的名稱,呼叫這個類方法的時候,就new乙個物件直接去呼叫 比如 a類有乙個方法 loadsomething 使用的時候 new a loadsomething 2.如果在開發中想傳入不同的類,讓傳入的類都去呼叫loadsomething 方法 此時,因為不知道後面會傳入什麼類...