統(tǒng)計(jì)作戰(zhàn)單位數(shù)

LeetCode第1395題

題目描述:
n 名士兵站成一排原押。每個(gè)士兵都有一個(gè) 獨(dú)一無(wú)二 的評(píng)分 rating 搂赋。

每 3 個(gè)士兵可以組成一個(gè)作戰(zhàn)單位,分組規(guī)則如下:

從隊(duì)伍中選出下標(biāo)分別為 i炒嘲、j轴或、k 的 3 名士兵,他們的評(píng)分分別為 rating[i]、rating[j]灵迫、rating[k]
作戰(zhàn)單位需滿足: rating[i] < rating[j] < rating[k] 或者 rating[i] > rating[j] > rating[k] 喧笔,其中 0 <= i < j < k < n
請(qǐng)你返回按上述條件可以組建的作戰(zhàn)單位數(shù)量。每個(gè)士兵都可以是多個(gè)作戰(zhàn)單位的一部分龟再。

示例 1:

輸入:rating = [2,5,3,4,1]
輸出:3
解釋:我們可以組建三個(gè)作戰(zhàn)單位 (2,3,4)书闸、(5,4,1)、(5,3,1) 利凑。
示例 2:

輸入:rating = [2,1,3]
輸出:0
解釋:根據(jù)題目條件浆劲,我們無(wú)法組建作戰(zhàn)單位。
示例 3:

輸入:rating = [1,2,3,4]
輸出:4

來(lái)源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/count-number-of-teams

思路:
最開(kāi)始做這道題時(shí)哀澈,想著將其排序牌借,然后用一個(gè)數(shù)組記錄其原來(lái)的下標(biāo),依據(jù)三個(gè)下標(biāo)是否為升序或者逆序割按,來(lái)判斷其能否組成一個(gè)作戰(zhàn)單位膨报。但是這種辦法感覺(jué)本質(zhì)上并沒(méi)有使問(wèn)題更清晰。因?yàn)閱?wèn)題的本質(zhì)在于數(shù)組的下標(biāo)和數(shù)組的值都要為順序或者一個(gè)順序一個(gè)逆序适荣。排序的手段只是交換了數(shù)組的值和下標(biāo)的“位置”(排序后的值按升序排列现柠,可看做是數(shù)組下標(biāo),而原來(lái)的下標(biāo)被打亂了)弛矛。所以就放棄這種思路了够吩。
于是想到用暴力法來(lái)做,設(shè)定i,j,k三個(gè)變量丈氓,分別遍歷周循,時(shí)間復(fù)雜度為立方級(jí)別。
后來(lái)又看了評(píng)論万俗,知道可以用固定中間位置的方式來(lái)做湾笛,統(tǒng)計(jì)左邊比中間位置值小的個(gè)數(shù)cntl1,和右邊比中間位置值大的個(gè)數(shù)cntr1(升序)闰歪,或者統(tǒng)計(jì)左邊比中間位置值大的個(gè)數(shù)cntl2嚎研,和右邊比中間位置值大的個(gè)數(shù)cntr2(降序)。最后左右兩邊的個(gè)數(shù)相乘课竣,就是結(jié)果嘉赎。

源代碼:

int numTeams(int* rating, int ratingSize){
//暴力算法,三個(gè)for循環(huán)
    int i,j,k;
    int cnt = 0;
    for(i = 0;i < ratingSize - 2;i++){
        for(j = i + 1;j < ratingSize - 1;j++){
        if(rating[i] < rating[j]){
            for(k = j + 1;k < ratingSize;k++){
                if(rating[j] < rating[k])
                    ++cnt;
            }
        }
        else{
            for(k = j + 1;k < ratingSize;k++){
                if(rating[j] > rating[k])
                    ++cnt;
            }
        }
    }
    }

    return cnt;
}
int numTeams(int* rating, int ratingSize){
//取中間固定值方法
    int mid,left,right;
    int cntl1,cntr1,cntl2,cntr2;
    int cnt = 0;

    for(mid = 0;mid < ratingSize;mid++){
        cntl1 = cntl2 = cntr1 = cntr2 = 0;
        for(left = 0;left < mid;left++){
            if(rating[left] < rating[mid]){
                ++cntl1;
            }
            else{
                ++cntl2;
            }
        }

        for(right = mid + 1;right < ratingSize;right++){
            if(rating[right] > rating[mid]){
                ++cntr1;
            }
            else{
                ++cntr2;
            }
        }

        cnt += (cntl1 * cntr1 + cntl2 * cntr2);
    }
        return cnt;
}

分析

暴力方法采用嵌套的三個(gè)for循環(huán)于樟,時(shí)間復(fù)雜度為立方級(jí)別
取中間固定值方法公条,對(duì)于每一個(gè)固定值,都要循環(huán)遍歷其左右共n - 1個(gè)數(shù)迂曲,一共需遍歷n個(gè)中間值靶橱,所以時(shí)間復(fù)雜度為平方級(jí)別。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市关霸,隨后出現(xiàn)的幾起案子传黄,更是在濱河造成了極大的恐慌,老刑警劉巖队寇,帶你破解...
    沈念sama閱讀 217,277評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件膘掰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡佳遣,警方通過(guò)查閱死者的電腦和手機(jī)识埋,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)零渐,“玉大人窒舟,你說(shuō)我怎么就攤上這事∷信危” “怎么了惠豺?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,624評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)风宁。 經(jīng)常有香客問(wèn)我洁墙,道長(zhǎng),這世上最難降的妖魔是什么杀糯? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,356評(píng)論 1 293
  • 正文 為了忘掉前任扫俺,我火速辦了婚禮苍苞,結(jié)果婚禮上固翰,老公的妹妹穿的比我還像新娘。我一直安慰自己羹呵,他們只是感情好骂际,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,402評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著冈欢,像睡著了一般歉铝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上凑耻,一...
    開(kāi)封第一講書(shū)人閱讀 51,292評(píng)論 1 301
  • 那天太示,我揣著相機(jī)與錄音,去河邊找鬼香浩。 笑死类缤,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的邻吭。 我是一名探鬼主播餐弱,決...
    沈念sama閱讀 40,135評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了膏蚓?” 一聲冷哼從身側(cè)響起瓢谢,我...
    開(kāi)封第一講書(shū)人閱讀 38,992評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎驮瞧,沒(méi)想到半個(gè)月后氓扛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡论笔,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,636評(píng)論 3 334
  • 正文 我和宋清朗相戀三年幢尚,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片翅楼。...
    茶點(diǎn)故事閱讀 39,785評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡尉剩,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出毅臊,到底是詐尸還是另有隱情理茎,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評(píng)論 5 345
  • 正文 年R本政府宣布管嬉,位于F島的核電站皂林,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蚯撩。R本人自食惡果不足惜础倍,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,092評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望胎挎。 院中可真熱鬧沟启,春花似錦、人聲如沸犹菇。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,723評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)揭芍。三九已至胳搞,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間称杨,已是汗流浹背肌毅。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,858評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留姑原,地道東北人悬而。 一個(gè)月前我還...
    沈念sama閱讀 47,891評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像页衙,于是被迫代替她去往敵國(guó)和親摊滔。 傳聞我的和親對(duì)象是個(gè)殘疾皇子阴绢,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,713評(píng)論 2 354