求乙個陣列中出現次數前k種的元素

2021-08-04 19:08:15 字數 998 閱讀 6990

map

fruitcount;//建立map物件

for (int i = 0; i < sizeof(fruits) / sizeof(fruits[0]); ++i)

else

}

缺點:如果map中沒有要插入的這個水果,則需要遍歷兩次map。

思路二:只遍歷一次map

insert的返回值pair。既然不管是否插入成功,它都能返回我們需要的這個元素的迭代器。那麼,我們可以先插入,然後對其返回值進行儲存,如果該返回值得第二個引數是true,表示插入成功,不進行其他操作,如果為flase,表示插入失敗,那麼其返回的第乙個引數將會帶回已經存在的這個被插入元素的迭代器,當然輕而易舉就可以通過迭代器拿到這個元素的第二個引數v。

void calculatefruitcount(map

& m, string fruits, size_t size)

}

現在走到這裡已經全部插入了,那接下來我們就需要找前k個最喜歡的水果了。

思路一:

將統計好的資料全部放入乙個vector中,並且利用排序演算法sort進行排序。而其預設為公升序,最大的則位於陣列後邊,但是我們並不知道vector有多大。所以,我們採用降續,這樣最大的永遠在vector的前列.

void getbeginofthreefruits(map

& m, vector

::iterator>& v) //按照水果出現的次數降續儲存於v中

struct compare //仿函式(降續)

};

sort(v.begin(), v.end(),compare());

}

思路二:給乙個堆,這個堆只要k個大小。

因為找出現次數最多的,所以這裡給乙個小堆。堆頂元素為最小的數。每一次新進來的數字和堆頂比較,如果比堆頂小則不要。比堆頂大則把堆頂pop,把這個元素插入再重新排堆。

求乙個陣列中出現次數最多的數

描敘 一大推資料裡面,數字與數字之間用空格隔開,找出出現次數最多的乙個數字的演算法 cpp view plain copy print?include void findmosttimesdigit int src int srclen if tempcount maxcount else if t...

找出乙個陣列中出現次數最大的數

描敘 一大堆資料裡面,數字與數字之間用空格隔開,找出出現次數最多的乙個數字的演算法 includevoid findmosttimesdigit int src int srclen if tempcount maxcount else if tempcount maxcount printf 出現...

在乙個排序陣列中求乙個數K出現的次數

思路 1 因為陣列是有序的,因此可以遍歷陣列,遇到比k大的數就終止,時間複雜度o n int getnumberofk vectordata int k return count 2 利用二分查詢,找到後,可以在小範圍內再查詢 int getnumberofk vectordata int k wh...