簡單演算法的小應用

2021-09-28 15:19:06 字數 1126 閱讀 1258

最近在牛客網上經常進行一些演算法的練習,分享兩個好玩的題目。

附上牛客網的鏈結,當然了,和acm大神相比,這些題是入門的,想學習的童鞋就溫故知新一下吧。對了這是乙個比較好的平台,大家可以沒事來練練手。

排序問題

不知道為啥這個題目被分在了排序演算法中,我在寫這道題目的時候,為了提高效率,使用了二分查詢,快排等演算法,依然執行超時了,真的是很難過。後來我刪除了複雜的排序,直接暴力求解,反而可以了。

傳送門如下:牛客網

題解如下:

我這裡是使用map結構來儲存主要資料的,當然效率最高記憶體最小的就是使用陣列了;但是我為了方便理解就沒有使用陣列。按照基數排序的思想,我把電影的語言存在對應下標的陣列中了,這樣的查詢效率是最高的,因為你不管怎麼排序,每次去遍歷是很費時的。還有乙個小要點就是,你對陣列下標的頻繁訪問(哪怕是同乙個下標),不如用臨時變數儲存的效率高。

#include#include#includeusing namespace std;

struct movie;

int main()

cin >> m;

movie ret[m];

for(int i = 0; i < m;i++)

//sort(a, a+n);

for(int i = 0; i < m;i++)else}}

}// sort(ret, ret+m, cmpbyvalue());

cout《排序問題2

這個題目就比較簡單了,就是乙個排序之後,求最優的過程。

傳送門如下:牛客網

題解如下:

直觀的想,假設我們將貨倉建在第k個商店的座標上,那麼貨倉左邊有 k - 1 個商店,右邊有 n - k - 1 個商店,當我們將貨倉向右移動乙個單位,那麼貨倉距離左面所有的商店的距離就會增加乙個單位,距離右面所有的商店的距離會減少乙個單位,所以應當使左右商店的個數相同, k-1 = n-k-1, 那麼k=n/2, k就是整個序列中位數的位置。

#include #include using namespace std;

const int n = 100010;

int a[n];

int main()

簡單演算法的應用

include stdio.h 折半查詢 int searchitem int array,int len,int key int main int argc,char const ar long len sizeof array sizeof int int location searchitem...

分治演算法的簡單應用

1.要求2n個數的中位數,採用分治策略。每次劃分後,都會去掉一半的數,只剩原來一半的數。遞推關係式為 t n t n 2 o 1 由master定理,可得時間複雜度為o logn include include define n 1000000 using namespace std int a n...

遞迴演算法簡單應用

1.遞迴和非遞迴分別實現求第n個斐波那契數。斐波那契數 亦稱之為斐波那契數列 義大利語 successione di fibonacci 又稱 分割數列 費波那西數列 費波拿契數 費氏數列,指的是這樣乙個數列 1 1 2 3 5 8 13 21 在數學上,斐波那契數列以如下被以遞迴的方法定義 f0 ...