逆序?qū)?/h1>

在數(shù)組中的兩個數(shù)字如果前面一個數(shù)字大于后面的數(shù)字娜搂,則這兩個數(shù)字組成一個逆序?qū)Υ侥痢=o你一個數(shù)組风范,求出這個數(shù)組中逆序?qū)Φ目倲?shù)。
概括:如果a[i] > a[j] 且 i < j摹恰, a[i] 和 a[j] 構(gòu)成一個逆序?qū)Α?/p>

您在真實的面試中是否遇到過這個題辫继? Yes
樣例
序列 [2, 4, 1, 3, 5] 中,有 3 個逆序?qū)?(2, 1), (4, 1), (4, 3)俗慈,則返回 3 姑宽。

思路
在歸并排序的merge過程中計算逆序?qū)?shù)目

class Solution {
public:
    /**
     * @param A an array
     * @return total of reverse pairs
     */
    long long reversePairs(vector<int>& A) {
        // Write your code here
        if(A.size()==0){
            return 0;
        }
        vector<int>temp(A.size(),0);
        int count = 0;
        mergeSort(A,temp,0,A.size()-1,count);
        return count;
    }
    
    void mergeSort(vector<int>& A,vector<int>& temp,int left,int right,int &count) {
        if(left == right) {
            return;
        }
        int mid = (left + right)/2;
        mergeSort(A,temp,left,mid,count);
        mergeSort(A,temp,mid+1,right,count);
        merge(A,temp,left,mid,right,count);
        
    }
    
    void merge(vector<int>& A,vector<int>& temp,int left,int mid,int right,int & count) {
        for(int i=left;i<=mid;i++) {
            int leftDigit = A[i];
            for(int j=right;j>=mid+1;j--){
                int rightDigit = A[j];
                if(leftDigit<=rightDigit) {
                    continue;
                } else {
                    int bigerCount = (j-(mid+1))+1;
                    count += bigerCount;
                     break;
                }
            }
        }
        
        int i = left;
        int j = mid+1;
        int k = left;
        while(i<=mid&&j<=right) {
            if(A[i]<A[j]) {
                temp[k++] = A[i++];
            } else {
                temp[k++] = A[j++];
            }
        }
        for(int p=i;p<=mid;p++) {
            temp[k++] = A[p];
        }
        for(int p=j;p<=right;p++){
            temp[k++]=A[p];
        }
        for(int p=left;p<=right;p++){
            A[p]=temp[p];
        }
    }
};
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者

  • 序言:七十年代末,一起剝皮案震驚了整個濱河市姜盈,隨后出現(xiàn)的幾起案子低千,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,294評論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件示血,死亡現(xiàn)場離奇詭異棋傍,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)难审,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,493評論 3 385
  • 文/潘曉璐 我一進(jìn)店門瘫拣,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人告喊,你說我怎么就攤上這事麸拄。” “怎么了黔姜?”我有些...
    開封第一講書人閱讀 157,790評論 0 348
  • 文/不壞的土叔 我叫張陵拢切,是天一觀的道長。 經(jīng)常有香客問我秆吵,道長淮椰,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,595評論 1 284
  • 正文 為了忘掉前任纳寂,我火速辦了婚禮主穗,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘毙芜。我一直安慰自己忽媒,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 65,718評論 6 386
  • 文/花漫 我一把揭開白布腋粥。 她就那樣靜靜地躺著晦雨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪灯抛。 梳的紋絲不亂的頭發(fā)上金赦,一...
    開封第一講書人閱讀 49,906評論 1 290
  • 那天音瓷,我揣著相機(jī)與錄音对嚼,去河邊找鬼。 笑死绳慎,一個胖子當(dāng)著我的面吹牛纵竖,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播杏愤,決...
    沈念sama閱讀 39,053評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼靡砌,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了珊楼?” 一聲冷哼從身側(cè)響起通殃,我...
    開封第一講書人閱讀 37,797評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后画舌,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體堕担,經(jīng)...
    沈念sama閱讀 44,250評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,570評論 2 327
  • 正文 我和宋清朗相戀三年曲聂,在試婚紗的時候發(fā)現(xiàn)自己被綠了霹购。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,711評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡朋腋,死狀恐怖齐疙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情旭咽,我是刑警寧澤贞奋,帶...
    沈念sama閱讀 34,388評論 4 332
  • 正文 年R本政府宣布,位于F島的核電站穷绵,受9級特大地震影響忆矛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜请垛,卻給世界環(huán)境...
    茶點故事閱讀 40,018評論 3 316
  • 文/蒙蒙 一催训、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧宗收,春花似錦漫拭、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,796評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至匈勋,卻和暖如春礼旅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背洽洁。 一陣腳步聲響...
    開封第一講書人閱讀 32,023評論 1 266
  • 我被黑心中介騙來泰國打工痘系, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人饿自。 一個月前我還...
    沈念sama閱讀 46,461評論 2 360
  • 正文 我出身青樓汰翠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親昭雌。 傳聞我的和親對象是個殘疾皇子复唤,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,595評論 2 350

推薦閱讀更多精彩內(nèi)容