找出n个数中重复最多的10个数

题目很清晰,直接上python代码

import pandas as pd
import copy

class BenchMark:
    def __init__(self):
        self.MIN = 10000
        self.data = 0
    def Reset(self):
        self.MIN = 10000
        self.data = 0

dictCounts = {}
dictTop10_D2C = {}
BENCH_MARK = BenchMark()
LAST_BENCH_MARK = BenchMark()
run_count1 = 0
run_count2 = 0

def FindTop10(data):
    global BENCH_MARK, LAST_BENCH_MARK,run_count1,run_count2
    if(data in dictCounts):
        dictCounts[data] += 1
    else:
        dictCounts[data] = 1

    temp = dictCounts[data]

    #just record run times
    run_count1 += 1

    if LAST_BENCH_MARK.MIN != 10000 and temp< LAST_BENCH_MARK.MIN:
        return

    dictTop10_D2C[data] = temp

    if len(dictTop10_D2C)>10:
        BENCH_MARK.Reset()
        for item in dictTop10_D2C:

            #just record run times
            run_count2+=1

            if dictTop10_D2C[item] < BENCH_MARK.MIN:
                BENCH_MARK.MIN = dictTop10_D2C[item]
                BENCH_MARK.data = item
        LAST_BENCH_MARK = copy.deepcopy(BENCH_MARK)
        dictTop10_D2C.pop(BENCH_MARK.data)

def PrintData2Count(aDict):
    for key in aDict:
        print(‘%.1f:%d‘ % (key, aDict[key]))

if __name__ == ‘__main__‘:
    df = pd.read_csv(‘D:/data/ctp_data/rb/201709/rb1801_20170905.csv‘)
    for data in df[‘LastPx‘]:
        FindTop10(data)

    PrintData2Count(dictCounts)
    print("==============dictCounts length:", len(dictCounts))
    PrintData2Count(dictTop10_D2C)

    print("run_count1:%d,run_count2:%d" %(run_count1,run_count2))

运行结果如下:

。。。。。。

4121.0:206
4123.0:278
4124.0:180
4122.0:244
4125.0:118
4126.0:34
4127.0:4
4081.0:1366
4080.0:1073
4077.0:1072
4078.0:1091
4079.0:800
4076.0:874
4075.0:886
4074.0:1108
4071.0:719
4073.0:1281
4072.0:1049
4070.0:567
4069.0:442
4068.0:290
4067.0:199
4066.0:204
4065.0:109
4064.0:60
4063.0:80
4062.0:57
4061.0:70
4060.0:70
4059.0:32
4057.0:6
4058.0:22
4129.0:6
4137.0:2
4135.0:2
4133.0:2
==============dictCounts length: 75
4109.0:2080
4108.0:2047
4095.0:3009
4096.0:2785
4094.0:2265
4099.0:2573
4098.0:2702
4097.0:2491
4100.0:2147
4107.0:1809
run_count1:70684,run_count2:19679

时间: 2024-11-08 19:50:27

找出n个数中重复最多的10个数的相关文章

找出十进制数中出现的&#39;&#39;一&#39;&#39;的个数

一.题目要求: 给定一个十进制的正整数,写下从1开始,到N的所有整数,然后数一下其中出现“1”的个数. 要求: 1.写一个函数 f(N) ,返回1 到 N 之间出现的“1”的个数.例如 f(12)  = 5. 2.在32位整数范围内,满足条件的“f(N) =N”的最大的N是多少. 二.解决思路 通过列举几个数进行计算,可以发现函数f(N)规律如下: 1.一位十进制数:当N>=1时,f(N)=1:当N=0时,f(N)= 0; 2.两位十进制数:f(13)=个位出现1的个数+十位出现1的个数=2+4

封装函数,找出数组 arr 中重复出现过的元素.

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>Title</title></head><body><script> //封装函数,找出数组 arr 中重复出现过的元素. //示例: console.log(duplicates( [1, 2, 4, 4, 3, 3, 1,

算法试题 - 找出一个序列中出现频率最高的三个数

题目 找出一个序列中出现频率最高的三个数 解析 思路一 创建一个新字典, k 为 序列的值, 然后 v 的初始值 0, 然后循环序列进行计数, 然后进行新字典的处理..... 不行, 不好处理了. 此思路不行 思路二 利用 colletctions 的 Counter 模块, 内部有个方法可以解决 k 值问题 答案 答案一 可以往下继续实现, 但是有点麻烦了 li = [2, 5, 3, 4, 1, 8, 1, 2, 6, 6, 1, 5, 1, 5] d = dict.fromkeys(li,

找出一堆数中最小的前K个数

描写叙述: 给定一个整数数组.让你从该数组中找出最小的K个数 思路: 最简洁粗暴的方法就是将该数组进行排序,然后取最前面的K个数就可以. 可是,本题要求的仅仅是求出最小的k个数就可以,用排序能够但显然有点浪费.比方让求10000个整数数组中的最小的10个数.用排序的话平均时间复杂度差为Nlog(N). 于是想到了,用堆来实现,可是自己实现又太麻烦.想到了java里面的TreeSet,先将K个数放入TreeSet中.因为TreeSet会对里面的元素进行排序.所以在TreeSet中的元素是有序的.以

找出排序数组中重复数字的个数

开始我的思路是先二分查找找到一个,然后再两边分别看个数. 但是这种方法会退化到O(n).效率不好. 所以更好的方法是,先找出第一个,再找出最后一个.这个在二分查找的时候,通过判断条件的处理,是能够获得的. 比较基本的思路是,如果找到的数=k,那么判断前面一个数是不是k,如果不是,停止查找,这个是第一个:如果是的,那么继续在前半部分查找.领悟.

485. 找出二进制串中连续的1的个数 Max Consecutive Ones

Given a binary array, find the maximum number of consecutive 1s in this array. Example 1: Input: [1,1,0,1,1,1] Output: 3 Explanation: The first two digits or the last three digits are consecutive 1s. The maximum number of consecutive 1s is 3. Note: T

找出给定字符串中出现最多的字符和次数

public static void findMaxCountChar(String str) { if (str == null || str == "") return; Map<String, Integer> map = new HashMap<String, Integer>(); int maxCount = 0; String maxCountStr = ""; List<String> list = new Arr

请找出&quot;aaaabbcccdddd&quot;字符串中出现最多的字母

function getCount(str) { for(var code=32;code<128;code++){ var mych=String.fromCharCode(code); var count=0; for(var i=0;i<str.length;i++){ var ch=str.charAt(i); if(ch===mych){ count++; } } if(count>0){ console.log("字符"+mych+"出现了&qu

找出一个字符串中最长重复次数的子字符串,并计算其重复次数

原题 找出一个字符串中最长重复次数的子字符串,并计算其重复次数.例如:字符串"abc fghi bc kl abcd lkm abcdefg",并返回"abcd"和2. 我的思路 为了方便表述,我们使用变量src作为原字符串,sub_str作为子字符串. 由于题目要求寻找至少重复2次的最长的子字符串,重点在于最长的子字符串,而不在于重复的最多次数.因此我们可以从长度最长的字符串入手,计算其重复次数.只要重复达到2次,即可返回该字符串. 显然长度最长的子字符串就是原串