第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

C#,如何在另一個(gè)二維數(shù)組中保存一個(gè)數(shù)組中元素的頻率?

C#,如何在另一個(gè)二維數(shù)組中保存一個(gè)數(shù)組中元素的頻率?

C#
翻翻過去那場雪 2021-05-10 16:45:34
所以這是我有問題的代碼。當(dāng)我嘗試傳遞帶有N個(gè)參數(shù)的數(shù)組時(shí),假設(shè)結(jié)果為{2,1,2,2,5},我想得到二維的secArray [element,元素的頻率]。問題是我得到的不止于此,在這種情況下,我得到的數(shù)組如下:23 11 22 21 52        Console.WriteLine("Enter number of elements: ");        int n = int.Parse(Console.ReadLine());        int[] array = new int[n];        for (int i = 0; i < array.Length; i++)        {            Console.Write("Array[{0}]: ", i);            array[i] = int.Parse(Console.ReadLine());        }        //problematic code begins        int[,] secArray = new int[n,2];        for(int i = 0;i<n;i++)        {            for(int j = 0; j<n;j++)            {                if(array[i] == secArray[j,0])                {                    secArray[j, 1] += 1;                }                else                {                    secArray[i, 0] = array[i];                    secArray[i, 1] = 1;                }            }        }        //problematic code ends        //printing - works good        Console.WriteLine("How many same elements?");        for (int row = 0; row < secArray.GetLength(0); row++)        {            for (int col = 0; col < secArray.GetLength(1); col++)            {                Console.Write(secArray[row, col]);            }            Console.WriteLine();        }如果有人知道如何解決此問題,我將不勝感激。我不知道實(shí)際問題在哪里,這讓我感到沮喪。
查看完整描述

3 回答

?
暮色呼如

TA貢獻(xiàn)1853條經(jīng)驗(yàn) 獲得超9個(gè)贊

第一個(gè)問題涉及第一個(gè)陳述。


int[,] secArray = new int[n,2];

在遍歷數(shù)組之前,您不知道數(shù)組中有多少個(gè)唯一元素。您不能使用n,因?yàn)閚是參數(shù)的總數(shù),可以大于唯一元素的數(shù)量。


其次,嵌套的for循環(huán)效率很低。您的算法會(huì)遍歷數(shù)組中每個(gè)元素的數(shù)組,因此它將在O(n ^ 2)時(shí)間內(nèi)運(yùn)行。


想想:您是否必須多次遍歷數(shù)組?為什么不使用哈希表(C#中的字典)在遍歷數(shù)組時(shí)跟蹤計(jì)數(shù)?哈希表使用一種非常有效的查找機(jī)制來告訴您是否已經(jīng)看到該元素,并且該值可用于跟蹤計(jì)數(shù)。


考慮用以下代碼替換有問題的代碼,并了解其工作方式。


        Dictionary<int, int> elementCounts = new Dictionary<int, int>();


        for(int i = 0; i < n; i++)

        {

            int element = array[i];

            if (elementCounts.ContainsKey(element))

                elementCounts[element]++;

            else

                elementCounts.Add(element, 1);

        }



        Console.WriteLine("How many same elements?");

        foreach(KeyValuePair<int,int> count in elementCounts)

        {

            Console.WriteLine("Element: {0} Count: {1}", count.Key, count.Value);

        }

然后,如果要將哈希表(Dictionary)中的結(jié)果復(fù)制到二維數(shù)組,則可以執(zhí)行以下操作。


        int numberOfUniqueElements = elementCounts.Count;

        int[,] secArray = new int[numberOfUniqueElements, 2];

        int j = 0;

        foreach (KeyValuePair<int, int> count in elementCounts)

        {

            secArray[j, 0] = count.Key;

            secArray[j, 1] = count.Value;

            j++;

        }


查看完整回答
反對(duì) 回復(fù) 2021-05-23
?
慕標(biāo)5832272

TA貢獻(xiàn)1966條經(jīng)驗(yàn) 獲得超4個(gè)贊

我會(huì)用Linq的GroupBy來做到這一點(diǎn)

var array = new int[] { 2, 1, 2, 2, 5 };
var result = array.GroupBy(x => x).Select(x => new[] { x.Key, x.Count() }).ToArray();


查看完整回答
反對(duì) 回復(fù) 2021-05-23
?
四季花海

TA貢獻(xiàn)1811條經(jīng)驗(yàn) 獲得超5個(gè)贊

為什么不使用哈希表。令數(shù)組中的數(shù)字為哈希條目鍵,令哈希條目的值為計(jì)數(shù)。然后只需遍歷數(shù)組一次。在遍歷數(shù)組時(shí),檢查是否存在哈希條目(如果存在),如果沒有,則添加1。


就像是


for(int i = 0; i<n;i++) {

  if(hashTable.containsKey(array[i])) {

    hashTable[array[i]]++];

  } else {

    hashTable.add(array[i],1);

  }

}

請(qǐng)注意,這是quedocode,將需要查找方法并正確實(shí)現(xiàn)。


查看完整回答
反對(duì) 回復(fù) 2021-05-23
  • 3 回答
  • 0 關(guān)注
  • 194 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)