陣列中的逆序對
在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。
沒想到這道題能暴力破解。
class solution }}
return retval ;
}};
這道題我看的劍指offer上的**,inversepairscore函式的形參和實參看上去好繞.....
// 30.cpp : 定義控制台應用程式的入口點。
//#include "stdafx.h"
#include using namespace::std;
class solution
int retval = inversepairscore(data, copy, 0, data.size() - 1);
return retval;
} int inversepairscore(vector& data, vector& copy, int start, int end)
int length = (end - start) / 2;
int left = inversepairscore(copy, data, start, start + length);
int right = inversepairscore(copy, data, start + length + 1, end);
int i = start + length;
int j = end;
int indexofcopy = end;
int count = 0;
while (i >= start && j >= start + length + 1)
else
} for (; i >= start; --i)
copy[indexofcopy--] = data[i];
for (; j >= start + length + 1; --j)
copy[indexofcopy--] = data[j];
return left + right + count;
}};int _tmain(int argc, _tchar* argv)
演算法32 計算陣列中的逆序對
設 a 1.n 是乙個陣列,如果對於 i j 有 a i a j 則 a i 和 a j 構成一對逆序。給定乙個陣列,計算陣列中逆序對的個數。例如陣列 a 則 是逆序對,返回 3。兩個 for 迴圈列舉所有的數對,如果是逆序對,則 count 最終返回 count 即可。時間複雜度 o n 2 如下...
陣列中逆序對
題目 在陣列中的兩個數字,如果前面的乙個數字大於後面的數字,則這兩個數字為乙個逆序對。輸入乙個陣列,求這個陣列的逆序對個數。例如 給定陣列 則有 5,3 5,1 8,3 8,1 3,1 這5個逆序對。問題分析 我採用兩種方法來解決這個問題 1 考慮到二叉搜尋樹中每個節點x,它的左子樹所有關鍵字的值小...
陣列中的逆序對
來自劍指offer 分析 我們第一反應是順序掃瞄整個陣列,每掃瞄到乙個數字時,逐個比較該數字和它後面的數字的大小。如果後面的數字比它小,則這個兩個數字就組成了乙個逆序對。假設陣列有n個數字,由於每個數字都要和o n 個數字作比較,因此這個演算法的時間複雜度為o n 2 換思路 我們採用歸併思想,先考...