不多bb,\(o(n^2)\)
#include using namespace std;
void solve()
; int f[5000]=;
int m;
cin >> m;
for (int i = 0; i < m; i++)
cin >> a[i];
f[0] = 0;
for (int i = 1; i < m; i++)
f[i] = f[i - 1] + sum;
} cout << f[m - 1] << endl;
}int main()
return 0;
}
在待排序序列長度為 1 的時候,遞迴開始「回公升」,因為我們預設長度為 1 的序列是排好序的。
#include using namespace std;
int mergesort(int *nums, int *tmp, int l, int r) //左指標超出右指標,迴圈結束
int mid = (l + r) / 2;
int inv_count = 0;
inv_count+=mergesort(nums, tmp, l, mid) + mergesort(nums, tmp, mid + 1, r);//遞迴迴圈
int i = l, j = mid + 1, pos = l;//i,j為左右指標,pos為臨時陣列tmp的指標
while (i <= mid && j <= r)
else
++pos;
}for (int k = i; k <= mid; ++k)
for (int k = j; k <= r; ++k)
for(int i=l;i<=r;i++)
//copy(tmp.begin() + l, tmp.begin() + r + 1, nums.begin() + l);//這裡是把排序好的tmp陣列複製給nums
return inv_count;
}void solve()
cout << mergesort(a,sum,0,n-1) << endl;
}int main()
return 0;
}
思路
1.求逆序對數量,我們只要求每個數後面有多少個數比這個數小,採用樹狀陣列解決
2.將每個數離散化,用二分查詢找到每個數對應的離散後的值
3,求解時,從後往前列舉,先統計後面有多少個數比這個數小,然後在把它加到樹中
**實現(用vector比較好寫,這裡就不寫了)
不贅述
HashMap與衝突解決演算法
hash map是經常被使用的一種資料結構,而其實現方式也是多種多樣。如果要求我們使用盡可能簡單的方式實現hash map,具體該如何做呢?我們知道hash map最重要兩個概念是hash函式和衝突解決演算法。hash map鍵 值之間的對映關係,hash函式將鍵對映為記憶體位址,衝突解決演算法用於...
漢諾塔問題解決演算法
問題描述 假設有3 個分別命名為x,y,z的塔座,在塔座 x上插有 n個直徑大小各不相同 依小到大編號為1,2,n個圓盤。現要求將 x軸上的 n個圓盤移至塔座 z上並仍按同樣順序疊排,圓盤移動時必須遵守下列規則 1 每次只能移動乙個圓盤 2 圓盤可以插在x,y和z中的任一塔座上 3 任何時刻都不能將...
蛙跳台階問題解決演算法
題目 乙隻青蛙可以一次跳上一級台階,也可以一次跳上二級,求該青蛙跳上乙個n級台階總共有多少種跳法1 解題思路 我們把n級台階的跳法看成是n的函式,記為f n 當n 2時,第一次調的時候就有兩種不同的選擇,一是第一次跳一級,則此時的跳法數目等於後面剩下的n 1級台階的跳法數目,即為f n 1 另一種選...