127. H-Index

Given an array of citations (each citation is a non-negative integer) of a researcher, write a function to compute the researcher's h-index.

According to the definition of h-index on Wikipedia: "A scientist has index h if h of his/her N papers have at least h citations each, and the other N − h papers have no more than h citations each."

For example, given citations = [3, 0, 6, 1, 5], which means the researcher has 5 papers in total and each of them had received 3, 0, 6, 1, 5 citations respectively. Since the researcher has 3 papers with at least 3 citations each and the remaining two with no more than 3 citations each, his h-index is 3.

Note: If there are several possible values for h, the maximum one is taken as the h-index.

 /**
     * 题目的意思是给定数组中每个元素表示其对应文章的引用次数,求一个引用次数h,使得所有的引用次数中有h次引用次数是大于等于h,
     * 其他的N-h个引用次数小于h。
     * 参见http://blog.csdn.net/xudli/article/details/48226129。
     * 做法是为计数排序的变型。
     * 首先定义一个数组countArray,其下标为i的元素表示引用次数为i的在原数组中出现了次数,countArray[i]表示引用次数大于等于n的有几次。
     * 然后从后往前遍历数组,更新countArray[i] = countArray[i] + countArray[i+1]表示引用次数大于等于i的在原数组中出现的次数,
     * 直到遇到countArray[i]>=i,即表示找到了h = i表示原数组中有i个元素的值大于等于i,有n-i个元素值不大于i
     * @date 20150512
     */
    public int hIndex(int[] citations) {
    	  int n = citations.length;
          int[] countArray = new int[n+1];
          
          /*下标为i的元素表示引用次数为i的在原数组中出现了次数,countArray[i]表示引用次数大于等于n的有几次*/
          for(int i=0; i<n; i++) {
              if(citations[i] >= n) countArray[n]++;
              else countArray[citations[i]]++;
          }
          
          /*然后从后往前遍历数组,更新countArray[i] = countArray[i] + countArray[i+1]表示引用次数大于等于i的在原数组中出现的次数,
           * 直到遇到countArray[i]>=i,即表示找到了h = i表示原数组中有i个元素的值大于等于i,有n-i个元素值不大于i*/
          if(countArray[n]>=n) return n;
          for(int i=n-1; i>=0; i--) {
              countArray[i] = countArray[i] + countArray[i+1];
              if(countArray[i]>=i) return i;
          }
          return 0;
    }


还有另外一种做法是:

http://blog.csdn.net/canglingye/article/details/48207011

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
单片微型计算机(MCU)经过多年的发展,在性能上有很大的进步,在型号上发展到上千种类,已经广泛应用于人类社会生活的各个领域。单片机课程已经成为高校计算机、自动化、测控以及电子信息工程等专业的重要课程。该课程是一门理论性和实践性都很强的课程,在实际教学中,应将理论教学和实验教学紧密结合。学生在掌握理论知识之余,必须通过编写程序、设计硬件电路、仿真、调试这一系列的实验过程,才能更好地掌握单片机的结构原理和应用技能。随着单片机及其接口技术的飞速发展,目前市场上供应的编程仿真实验资源并不能完全满足高校单片机课程教与学的需求,构建低成本、技术先进、源码公开的单片机编程仿真实验系统,对我国单片机课程的教学和单片机领域人才的培养具有重要的现实意义。 本论文结合目前教学中对单片机编程仿真实验系统的实际需求,采用模块化结构设计思想,精心设计和开发了单片机编程仿真实验系统。该单片机编程仿真实验系统由PC机端单片机编程控制软件和单片机编程仿真实验板两部分组成。PC机端的单片机编程控制软件可以自动检测到连接到单片机编程仿真实验板上的单片机,控制单片机编程器擦除、写入、读出、校验目标单片机ROM中的程序,以十六进制文件(.HEX文件)格式显示在控制界面内;单片机仿真实验系统能够把写入单片机的程序实时地运行,并呈现实际运行效果。单片机编程控制软件和单片机仿真实验板组成一个完整的单片机编程仿真实验系统。
`multiprocessing.RawArray` 是 Python 中 `multiprocessing` 模块中的一个类,用于在多进程间共享内存。使用方法如下: 首先导入 `multiprocessing` 模块: ```python import multiprocessing ``` 然后创建一个 `RawArray` 对象: ```python array_size = 10 # 数组的长度 array_typecode = 'i' # 数组元素的类型码,这里为整数类型 shared_array = multiprocessing.RawArray(array_typecode, array_size) ``` 这里创建了一个长度为 10 的整数数组。在创建 `RawArray` 对象时,需要指定数组元素的类型码。常见的类型码包括: - 'b':表示有符号的字节类型(-128 到 127)。 - 'B':表示无符号的字节类型(0 到 255)。 - 'h':表示有符号的短整型(-32768 到 32767)。 - 'H':表示无符号的短整型(0 到 65535)。 - 'i':表示有符号的整型(-2147483648 到 2147483647)。 - 'I':表示无符号的整型(0 到 4294967295)。 - 'f':表示浮点型。 - 'd':表示双精度浮点型。 接下来可以在多个进程中访问和修改这个共享数组: ```python def worker_proc(index): shared_array[index] = index # 将当前进程的进程号写入数组 processes = [] for i in range(array_size): p = multiprocessing.Process(target=worker_proc, args=(i,)) processes.append(p) p.start() for p in processes: p.join() print(list(shared_array)) # 输出数组的值 ``` 这里创建了 `array_size` 个进程,每个进程都将自己的进程号写入数组的对应位置。最后输出数组的值,可以看到数组中的值由各个进程共同修改得到。需要注意的是,由于共享内存可能会引起竞争条件,因此在多进程间访问和修改共享内存时需要采取一些措施来保证数据的正确性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值