標籤:文章 思路 逆序 原理 很多 oid == cout 加油
今天做了7622求排列逆序,半個小時,得到了一個時間逾時的結果,但是我不太知道怎麼改進了。
代碼如下:
#include <iostream>#include <algorithm>using namespace std;int num[100002];int status[100002];long long result = 0;int n;int cal2(int number){ int x=0; for(int i=number;i<n;i++){ if(status[i]==1) x++; } return x;}void cal(int number){ int i=0; for(;i<n;i++){ if(status[i]==0){ if(number == num[i]){ status[i]=1; } if(number > num[i]){ break; } } } result+=(n-i-cal2(i));}bool cmp(int a,int b){ return a>b;}int main(){ int x[100002]; cin>>n; for(int i=0;i<n;i++){ cin>>num[i]; x[i]=num[i]; status[i]=0; } sort(num,num+n,cmp); for(int i=0;i<n;i++){ cal(x[i]); } cout<<result<<endl; return 0;}
思路是把數組排序好,然後每個對應了標記,用過的就把標記設為1,這樣再計算。
後來發現,確實要迴圈很多次,有點耗時間。
然後看看提幹,發現有提示說用歸併排序,然後我就去查歸併排序了。
後來發現是利用遞迴,然後把左邊排好,右邊排號,再合并起來。
但是我還是不太熟悉,大概是弄懂原理了,還是錯了0-0。
覺得自己周末得花半天來專門練習演算法,然後解決這些遺留問題,
然後每天的演算法題如果沒做出來,就至少也得寫一篇這樣的小結文章,反思,嗯啊加油。
2017/09/06:演算法練習小記