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

C++歸并排序算法的應(yīng)用:計算右側(cè)小于當(dāng)前元素的個數(shù)

這篇具有很好參考價值的文章主要介紹了C++歸并排序算法的應(yīng)用:計算右側(cè)小于當(dāng)前元素的個數(shù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

題目

給你一個整數(shù)數(shù)組 nums ,按要求返回一個新數(shù)組 counts 。數(shù)組 counts 有該性質(zhì): counts[i] 的值是 nums[i] 右側(cè)小于 nums[i] 的元素的數(shù)量。
示例 1:
輸入:nums = [5,2,6,1]
輸出:[2,1,1,0]
解釋:
5 的右側(cè)有 2 個更小的元素 (2 和 1)
2 的右側(cè)僅有 1 個更小的元素 (1)
6 的右側(cè)有 1 個更小的元素 (1)
1 的右側(cè)有 0 個更小的元素
示例 2:
輸入:nums = [-1]
輸出:[0]
示例 3:
輸入:nums = [-1,-1]
輸出:[0,0]
參數(shù)范圍
1 <= nums.length <= 105
-104 <= nums[i] <= 104

2023年3月版

用的樹狀數(shù)組
template
class CTreeArr
{
public:
CTreeArr(int iSize) :m_vData(iSize+1)
{
}
void Add(int index, T value)
{
index++;
while (index < m_vData.size())
{
m_vData[index] += value;
index += index&(-index);
}
}
T Sum(int index)
{
index++;
T ret = 0;
while (index )
{
ret += m_vData[index];
index -= index&(-index);
}
return ret;
}
private:
vector m_vData;
};
class Solution {
public:
vector countSmaller(vector& nums) {
int iMin = *std::min_element(nums.begin(), nums.end());
for (auto& n : nums)
{
n -= iMin;
}
int iMax = *std::max_element(nums.begin(), nums.end());
CTreeArr treeArr(iMax + 1);
vector vRet(nums.size());
for (int i = nums.size() - 1; i >= 0; i–)
{
vRet[i] = treeArr.Sum(nums[i] - 1);
treeArr.Add(nums[i],1);
}
return vRet;
}
};

2023年8月 歸并排序

class CMergeSortIndex
{
public:
CMergeSortIndex(const vector& nums):m_nums(nums)
{
m_c = nums.size();
m_vIndexs.resize(nums.size());
iota(m_vIndexs.begin(), m_vIndexs.end(), 0);
}
void SortIndex( int left, int right)
{
if (right - left <= 1)
{
return;
}
const int mid = left + (right - left) / 2;
SortIndex( left, mid);
SortIndex( mid, right);
//nums的[left,mid) 和[mid,right)分別排序
vector vIndexs;
int i1 = left, i2 = mid;
while ((i1 < mid) && (i2 < right))
{
if (m_nums[m_vIndexs[i1]] > m_nums[m_vIndexs[i2]])
{
vIndexs.emplace_back(m_vIndexs[i2++]);
}
else
{
vIndexs.emplace_back(m_vIndexs[i1]);
OnAdd1(i1++, i2, left, mid, right);
}
}
while (i1 < mid)
{
vIndexs.emplace_back(m_vIndexs[i1]);
OnAdd1(i1++, i2, left, mid, right);
}
while (i2 < right)
{
vIndexs.emplace_back(m_vIndexs[i2++]);
}
for (int i = 0; i < vIndexs.size(); i++)
{
m_vIndexs[i + left] = vIndexs[i];
}
}
vector Sort()
{
SortIndex(0, m_c);
vector vRet(m_c);
for (int i = 0; i < m_c; i++)
{
vRet[i] = m_nums[m_vIndexs[i]];
}
return vRet;
}
protected:
virtual void OnAdd1(int i1, int i2, int left, int mid, int right) = 0;
int m_c;
const vector& m_nums;
vector m_vIndexs;
};

class CCountSmalle : public CMergeSortIndex
{
public:
CCountSmalle(const vector& nums):CMergeSortIndex(nums)
{
m_vRet.resize(m_c);
}
vector m_vRet;

// 通過 CMergeSortIndex 繼承
virtual void OnAdd1(int i1, int i2, int left, int mid, int right) override
{
	m_vRet[m_vIndexs[i1]] += i2 - mid;
}

};
class Solution {
public:
vector countSmaller(vector& nums) {
CCountSmalle test(nums);
auto tmp = test.Sort();
return test.m_vRet;
}

};

擴(kuò)展閱讀

視頻課程

有效學(xué)習(xí):明確的目標(biāo) 及時的反饋 拉伸區(qū)(難度合適),可以先學(xué)簡單的課程,請移步CSDN學(xué)院,聽白銀講師(也就是鄙人)的講解。
https://edu.csdn.net/course/detail/38771

如何你想快速形成戰(zhàn)斗了,為老板分憂,請學(xué)習(xí)C#入職培訓(xùn)、C++入職培訓(xùn)等課程
https://edu.csdn.net/lecturer/6176

相關(guān)下載

想高屋建瓴的學(xué)習(xí)算法,請下載《聞缺陷則喜算法冊》doc版
https://download.csdn.net/download/he_zhidan/88348653

鄙人想對大家說的話
聞缺陷則喜是一個美好的愿望,早發(fā)現(xiàn)問題,早修改問題,給老板節(jié)約錢。
墨家名稱的來源:有所得以墨記之。
如果程序是一條龍,那算法就是他的是睛

測試環(huán)境

操作系統(tǒng):win7 開發(fā)環(huán)境: VS2019 C++17
或者 操作系統(tǒng):win10 開發(fā)環(huán)境: VS2022 C++17

C++歸并排序算法的應(yīng)用:計算右側(cè)小于當(dāng)前元素的個數(shù),# 算法題,c++,排序算法,算法,樹狀樹狀,歸并排序,小于當(dāng)前元素的個數(shù),右側(cè)文章來源地址http://www.zghlxwxcb.cn/news/detail-736938.html

到了這里,關(guān)于C++歸并排序算法的應(yīng)用:計算右側(cè)小于當(dāng)前元素的個數(shù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 【排序算法】歸并排序與快速排序

    【排序算法】歸并排序與快速排序

    ??? ??????? 歡迎來到小林的博客??! ?????????博客主頁:??小林愛敲代碼 ?????????博客專欄:?? 算法訓(xùn)練筆記 ?????????社區(qū) :?? 進(jìn)步學(xué)堂 ?????????歡迎關(guān)注:??點贊??收藏??留言 今天給大家分享兩種排序,一種是

    2024年01月19日
    瀏覽(50)
  • 【算法】排序——歸并排序和計數(shù)排序

    【算法】排序——歸并排序和計數(shù)排序

    ?========================================================================= 主頁點擊直達(dá):個人主頁 我的小倉庫:代碼倉庫 C語言偷著笑:C語言專欄 數(shù)據(jù)結(jié)構(gòu)挨打小記: 初階數(shù)據(jù)結(jié)構(gòu)專欄 Linux被操作記: Linux專欄 LeetCode刷題掉發(fā)記: LeetCode刷題 算法頭疼記: 算法專欄? ========================

    2024年02月08日
    瀏覽(27)
  • 【初階算法4】——歸并排序的詳解,及其歸并排序的擴(kuò)展

    【初階算法4】——歸并排序的詳解,及其歸并排序的擴(kuò)展

    目錄 前言 學(xué)習(xí)目標(biāo): 學(xué)習(xí)內(nèi)容: 一、介紹歸并排序 1.1 歸并排序的思路 1.2 歸并排序的代碼 1.2.1 mergesort函數(shù)部分? 1.2.2 process函數(shù)部分? 1.2.3 merge函數(shù)部分? 二、AC兩道經(jīng)典的OJ題目 題目一:逆序?qū)栴} 題目二:小和問題? 三、練習(xí)一道LeetCode的題目 四、總結(jié)在什么情況下使

    2024年02月08日
    瀏覽(44)
  • 算法基礎(chǔ)15 —— 分治算法(歸并排序 + 快速排序)

    算法基礎(chǔ)15 —— 分治算法(歸并排序 + 快速排序)

    分治法的基本概念、思想 分治法是一種很重要的算法。 字面解釋,分治分治,分而治之。就是把一個復(fù)雜的問題分成兩個或更多的相同或相似的子問題,再把子問題分成更小的子問題……直到最后子問題可以簡單的直接求解,原問題的解即子問題的解的合并。 不難發(fā)現(xiàn),分

    2024年02月03日
    瀏覽(22)
  • 排序算法之【歸并排序】

    排序算法之【歸并排序】

    ?? 作者簡介:? 清水加冰,目前大二在讀,正在學(xué)習(xí)C/C++、Python、操作系統(tǒng)、數(shù)據(jù)庫等。 ?? 相關(guān)專欄: C語言初階、C語言進(jìn)階、C語言刷題訓(xùn)練營、數(shù)據(jù)結(jié)構(gòu)刷題訓(xùn)練營、有感興趣的可以看一看。 歡迎點贊 ?? 收藏 ?留言 ?? 如有錯誤還望各路大佬指正! ?每一次努力都

    2024年02月07日
    瀏覽(16)
  • 排序算法:歸并排序(非遞歸)

    排序算法:歸并排序(非遞歸)

    先贊后看,養(yǎng)成習(xí)慣?。。 _ ^3 ?? ?? ?? 碼字不易,大家的支持就是我堅持下去的動力。點贊后不要忘了 關(guān)注 我哦! 所屬專欄:排序算法 步驟如下: 1.先兩兩歸并,兩個為一組 2.然后根據(jù)每組的距離gap,分配組數(shù)進(jìn)行排序 3.gap每次擴(kuò)大2的倍數(shù) 4.注意一些細(xì)節(jié):首先注

    2024年03月24日
    瀏覽(24)
  • 歸并排序--排序算法

    歸并排序和快速排序一樣,都是基于分治思想的應(yīng)用。 通過遞歸,不斷將原數(shù)列分為兩個數(shù)列,然后再分別使其有序,最后通過歸并將兩個有序子數(shù)列合并為新的有序數(shù)列。 值得注意的是,與快速排序不同,歸并排序是穩(wěn)定的。 和快速排序先排序后遞歸不同,歸并排序是先

    2024年02月06日
    瀏覽(18)
  • 排序算法:歸并排序

    ????????約翰·馮·諾伊曼在 1945 年提出了歸并排序。在講解歸并排序之前,我們先一起思考一個問題:如何將兩個有序的列表合并成一個有序的列表? ????????這太簡單了,筆者首先想到的思路就是,將兩個列表拼接成一個列表,然后之前學(xué)的冒泡、選擇、插入、希爾

    2024年02月11日
    瀏覽(17)
  • 排序算法之歸并排序

    排序算法之歸并排序

    歸并排序,是創(chuàng)建在歸并操作上的一種有效的排序算法。算法是采用分治法(Divide and Conquer)的一個非常典型的應(yīng)用,且各層分治遞歸可以同時進(jìn)行。歸并排序思路簡單,速度僅次于快速排序,為穩(wěn)定排序算法,一般用于對總體無序,但是各子項相對有序的數(shù)列。 1. 基本思想

    2024年02月03日
    瀏覽(17)
  • 深度理解排序算法——歸并排序

    深度理解排序算法——歸并排序

    ………………………………………………………………………………… 給定一段無序數(shù)組,將數(shù)組拆分成 兩段 ,使得 左右兩段 得數(shù)組均呈現(xiàn)有序狀態(tài),再借助 臨時數(shù)組 將兩段數(shù)組歸并至一塊呈現(xiàn)有序,最后 拷貝 回原數(shù)組即得到有序數(shù)組。 從邏輯上理解,就是一顆 二叉

    2024年02月03日
    瀏覽(16)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包