国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LeetCode[315]計(jì)算右側(cè)小于當(dāng)前元素的個(gè)數(shù)

這篇具有很好參考價(jià)值的文章主要介紹了LeetCode[315]計(jì)算右側(cè)小于當(dāng)前元素的個(gè)數(shù)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

難度:Hard

題目:

給你一個(gè)整數(shù)數(shù)組?nums?,按要求返回一個(gè)新數(shù)組?counts?。數(shù)組?counts?有該性質(zhì):?counts[i]?的值是?nums[i]?右側(cè)小于?nums[i]?的元素的數(shù)量。?


示例 1:

輸入:nums = [5,2,6,1]
輸出:[2,1,1,0] 
解釋?zhuān)?/strong>
5 的右側(cè)有 2 個(gè)更小的元素 (2 和 1)
2 的右側(cè)僅有 1 個(gè)更小的元素 (1)
6 的右側(cè)有 1 個(gè)更小的元素 (1)
1 的右側(cè)有 0 個(gè)更小的元素

?示例 2:

輸入:nums = [-1]
輸出:[0]

?示例 3:

輸入:nums = [-1,-1]
輸出:[0,0]

提示:

  • 1 <= nums.length <= 105
  • -104 <= nums[i] <= 104

?Related Topics

  • 樹(shù)狀數(shù)組
  • 線(xiàn)段樹(shù)
  • 數(shù)組
  • 二分查找
  • 分治
  • 有序集合
  • 歸并排序

重點(diǎn)!??!解題思路

明確解題思路:

? ? ? ? 題中要求求出右側(cè)小于當(dāng)前元素的數(shù)量,如果將數(shù)組拆分開(kāi)來(lái),左右兩邊都是降序排列,如果當(dāng)左邊數(shù)組有一個(gè)值大于右邊數(shù)組的其中一個(gè)值,那么就意味著比當(dāng)前左邊這個(gè)數(shù)小的元素有右邊那個(gè)數(shù)到右邊數(shù)組末尾那么多個(gè),即題目可使用歸并排序來(lái)解決。

源碼+講解:

    class Solution {
        class Data {  //因?yàn)槟阋涗浢總€(gè)值所對(duì)應(yīng)得右邊元素個(gè)數(shù),hashmap太麻煩,我們直接封裝一個(gè)內(nèi)部類(lèi)
            int ind, val, cnt;  //對(duì)應(yīng)下標(biāo),值,右邊對(duì)應(yīng)得元素

            public Data(int ind, int val) {  //初始化
                this.ind = ind;
                this.val = val;
                cnt = 0;
            }
        }

        Data[] temp;  //歸并排序的克隆數(shù)組

        public List<Integer> countSmaller(int[] nums) {
            temp = new Data[nums.length];
            Data[] data = new Data[nums.length];  //待排序數(shù)組
            for (int i = 0; i < nums.length; i++) {  //將每個(gè)元素封裝到類(lèi)中
                data[i] = new Data(i, nums[i]);
            }
            merge_sort(data, 0, data.length - 1);  //開(kāi)始?xì)w并排序
            Arrays.sort(data, new Comparator<Data>() {  //當(dāng)歸并排序后,我們需要每個(gè)數(shù)組下標(biāo)從小到大來(lái)輸出,那么我們就需要一個(gè)小頂堆
                @Override
                public int compare(Data o1, Data o2) {
                    return o1.ind - o2.ind;
                }
            });
            List<Integer> res = new ArrayList<>();  //集合結(jié)果用來(lái)還原堆中的值
            for (Data datum : data) {
                res.add(datum.cnt);
            }
            return res;
        }

        //很基礎(chǔ)的一個(gè)歸并排序解法 如果有不懂得朋友 可以看看我前面發(fā)的題
        public void merge_sort(Data[] data, int l, int r) {
            if (l >= r) return;
            int mid = (l + r) >> 1;
            merge_sort(data, l, mid);
            merge_sort(data, mid + 1, r);
            int k = l, p1 = l, p2 = mid + 1;
            while (p1 <= mid || p2 <= r) {
                if (p2 > r || (p1 <= mid && data[p1].val > data[p2].val)) {
                    data[p1].cnt+=(r-p2+1);
                    temp[k++] = data[p1++];
                } else {
                    temp[k++] = data[p2++];
                }
            }
            for (int i=l;i<=r;i++) data[i]=temp[i];
        }
    }

?運(yùn)行結(jié)果:

LeetCode[315]計(jì)算右側(cè)小于當(dāng)前元素的個(gè)數(shù),算法刷題篇,快速排序,# 歸并排序(Merge-Sort):從二路到多路,leetcode,算法,排序算法

如果您還有什么疑問(wèn)或解答有問(wèn)題,可在下方評(píng)論,我會(huì)及時(shí)回復(fù)。

系列持續(xù)更新中,點(diǎn)個(gè)訂閱吧,喜歡練習(xí)算法那就點(diǎn)個(gè)攢吧?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-610294.html

到了這里,關(guān)于LeetCode[315]計(jì)算右側(cè)小于當(dāng)前元素的個(gè)數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀(guān)點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • uniapp使用uni-swipe-action后右側(cè)多了小于1px的間隙

    uniapp使用uni-swipe-action后右側(cè)多了小于1px的間隙

    問(wèn)題:uniapp使用uni-swipe-action后右側(cè)多了小于1px的間隙。且在真機(jī)上沒(méi)有問(wèn)題,但是在微信開(kāi)發(fā)者工具中有問(wèn)題。 代碼如下:在滑動(dòng)滑塊或者點(diǎn)擊這個(gè)區(qū)域時(shí),就會(huì)出現(xiàn)問(wèn)題。 ? 懷疑是,父級(jí)容器cart-box和子級(jí)uni-swipe-action寬度沒(méi)有完全相等導(dǎo)致。而容器都沒(méi)有設(shè)置固定寬度值

    2024年02月15日
    瀏覽(15)
  • LeetCode算法二叉樹(shù)—222. 完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù)

    LeetCode算法二叉樹(shù)—222. 完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù)

    目錄 222. 完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù) - 力扣(LeetCode) 代碼: 運(yùn)行結(jié)果:? 給你一棵 ?完全二叉樹(shù) ?的根節(jié)點(diǎn)? root ?,求出該樹(shù)的節(jié)點(diǎn)個(gè)數(shù)。 完全二叉樹(shù)?的定義如下:在完全二叉樹(shù)中,除了最底層節(jié)點(diǎn)可能沒(méi)填滿(mǎn)外,其余每層節(jié)點(diǎn)數(shù)都達(dá)到最大值,并且最下面一層的節(jié)點(diǎn)都集

    2024年02月07日
    瀏覽(30)
  • 【算法與數(shù)據(jù)結(jié)構(gòu)】222、LeetCode完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù)

    【算法與數(shù)據(jù)結(jié)構(gòu)】222、LeetCode完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù)

    所有的LeetCode題解索引,可以看這篇文章——【算法和數(shù)據(jù)結(jié)構(gòu)】LeetCode題解。 ?? 思路分析 :利用層序遍歷,然后用num++記錄節(jié)點(diǎn)數(shù)量。其他的例如遞歸法和迭代法也是如此。 ?? 層序遍歷程序如下 : 復(fù)雜度分析: 時(shí)間復(fù)雜度: O ( n ) O(n) O ( n ) 。 空間復(fù)雜度: O ( n )

    2024年02月15日
    瀏覽(26)
  • vue+elementui實(shí)現(xiàn)鼠標(biāo)觸及當(dāng)前頁(yè)面右邊緣,右側(cè)彈出新的對(duì)話(huà)框

    vue+elementui實(shí)現(xiàn)鼠標(biāo)觸及當(dāng)前頁(yè)面右邊緣,右側(cè)彈出新的對(duì)話(huà)框

    目前項(xiàng)目中需要自定義大屏,但是大屏右側(cè)顯示矩形對(duì)話(huà)框有一點(diǎn)突兀,所以做成鼠標(biāo)靠近頁(yè)面右側(cè)邊緣的時(shí)候?qū)υ?huà)框彈出,點(diǎn)擊對(duì)話(huà)框上的回縮按鈕后,對(duì)話(huà)框隱藏。 效果如圖所示 對(duì)話(huà)框使用 elemetui 自帶的 el-drawer ,設(shè)置其是否展示參數(shù)初始化為 false 在最外層的div標(biāo)簽添

    2024年02月02日
    瀏覽(26)
  • Practice1|1207. 獨(dú)一無(wú)二的出現(xiàn)次數(shù)、1365. 有多少小于當(dāng)前數(shù)字的數(shù)字、941. 有效的山脈數(shù)組

    Practice1|1207. 獨(dú)一無(wú)二的出現(xiàn)次數(shù)、1365. 有多少小于當(dāng)前數(shù)字的數(shù)字、941. 有效的山脈數(shù)組

    1.題目: 給你一個(gè)整數(shù)數(shù)組?arr,請(qǐng)你幫忙統(tǒng)計(jì)數(shù)組中每個(gè)數(shù)的出現(xiàn)次數(shù)。 如果每個(gè)數(shù)的出現(xiàn)次數(shù)都是獨(dú)一無(wú)二的,就返回?true;否則返回 false。 示例 1: 輸入:arr = [1,2,2,1,1,3] 輸出:true 解釋?zhuān)涸谠摂?shù)組中,1 出現(xiàn)了 3 次,2 出現(xiàn)了 2 次,3 只出現(xiàn)了 1 次。沒(méi)有兩個(gè)數(shù)的出現(xiàn)

    2024年02月15日
    瀏覽(25)
  • 力扣(LeetCode)算法_C++—— 存在重復(fù)元素

    給你一個(gè)整數(shù)數(shù)組 nums 。如果任一值在數(shù)組中出現(xiàn) 至少兩次 ,返回 true ;如果數(shù)組中每個(gè)元素互不相同,返回 false 。 示例 1: 輸入:nums = [1,2,3,1] 輸出:true 示例 2: 輸入:nums = [1,2,3,4] 輸出:false 示例 3: 輸入:nums = [1,1,1,3,3,4,3,2,4,2] 輸出:true 提示: 1 = nums.length = 105 -1

    2024年02月09日
    瀏覽(28)
  • 算法訓(xùn)練day16Leetcode104二叉樹(shù)最大深度111二叉樹(shù)最小深度222完全二叉樹(shù)的節(jié)點(diǎn)個(gè)數(shù)

    https://www.bilibili.com/video/BV1Gd4y1V75u/?vd_source=8272bd48fee17396a4a1746c256ab0ae 用遞歸,但是什么順序沒(méi)想清楚 二叉樹(shù)節(jié)點(diǎn)的深度:指從根節(jié)點(diǎn)到該節(jié)點(diǎn)的最長(zhǎng)簡(jiǎn)單路徑邊的條數(shù)或者節(jié)點(diǎn)數(shù)(取決于深度從0開(kāi)始還是從1開(kāi)始) 二叉樹(shù)節(jié)點(diǎn)的高度:指從該節(jié)點(diǎn)到葉子節(jié)點(diǎn)的最長(zhǎng)簡(jiǎn)單路徑邊

    2024年01月16日
    瀏覽(28)
  • 力扣(LeetCode)算法_C++——存在重復(fù)元素 II

    存在重復(fù)元素 II 給你一個(gè)整數(shù)數(shù)組 nums 和一個(gè)整數(shù) k ,判斷數(shù)組中是否存在兩個(gè) 不同的索引 i 和 j ,滿(mǎn)足 nums[i] == nums[j] 且 abs(i - j) = k 。如果存在,返回 true ;否則,返回 false 。 示例 1: 輸入:nums = [1,2,3,1], k = 3 輸出:true 示例 2: 輸入:nums = [1,0,1,1], k = 1 輸出:true 示例

    2024年02月09日
    瀏覽(25)
  • element-ui的年份范圍選擇器,選擇的年份需等于或小于當(dāng)前年份,選擇的年份范圍必須在三年之內(nèi)

    element-ui的年份范圍選擇器,選擇的年份需等于或小于當(dāng)前年份,選擇的年份范圍必須在三年之內(nèi)

    日期限制處理(禁用),下面我以我這邊的需求為例, 選擇的年份需等于或小于當(dāng)前年份 選擇的年份范圍必須在三年之內(nèi) 1.限制起始日期小于截止日期 1)根據(jù)用戶(hù)選中的開(kāi)始日期,置灰不可選的日期范圍; 2)如果用戶(hù)先選擇截止日期,再選擇的開(kāi)始日期,且開(kāi)始日期大于

    2024年04月14日
    瀏覽(26)
  • 二叉樹(shù)算法思想和原理:介紹通過(guò)遞歸算法計(jì)算二叉樹(shù)結(jié)點(diǎn)個(gè)數(shù)的基本思路及C#、C++代碼示例

    二叉樹(shù)是一種非常常見(jiàn)的數(shù)據(jù)結(jié)構(gòu),它由結(jié)點(diǎn)組成,每個(gè)結(jié)點(diǎn)最多有兩個(gè)子結(jié)點(diǎn),分別稱(chēng)為左子結(jié)點(diǎn)和右子結(jié)點(diǎn)。在二叉樹(shù)中,每個(gè)結(jié)點(diǎn)都有一個(gè)數(shù)據(jù)域和一個(gè)指針域,指針域分別指向左子結(jié)點(diǎn)和右子結(jié)點(diǎn)。二叉樹(shù)有很多種不同的類(lèi)型,如滿(mǎn)二叉樹(shù)、完全二叉樹(shù)、平衡二叉樹(shù)

    2024年01月21日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包