博客
关于我
【Leetcode】275. H-Index II
阅读量:201 次
发布时间:2019-02-28

本文共 867 字,大约阅读时间需要 2 分钟。

题目地址:

题意是,给定一个单调增非负数组,找出满足这样性质的数 h h h:有多于等于 h h h个数是大于等于 h h h的。返回满足这样条件的最大的那个 h h h

思路是二分。首先考虑解的范围。显然 0 0 0是满足条件的,并且 h h h最大不超过数组长度 n n n,否则的话,要存在多于 n + 1 n+1 n+1个大于等于 n + 1 n+1 n+1的数,超出数组长度了,是不可能的。接下来 h h h有这样的性质:如果 h h h满足条件,那么 0 , . . . , h − 1 0,...,h-1 0,...,h1也满足条件。这为二分创造了条件。注意到 h h h满足条件,等价于数组倒数第 h h h个数是大于等于 h h h的,这就是判断条件。代码如下:

public class Solution {       public int hIndex(int[] citations) {           int l = 0, r = citations.length;        while (l < r) {               int m = l + (r - l + 1 >> 1);            // 判断倒数第m个数是不是大于等于m            if (citations[citations.length - m] >= m) {               	// 如果是,那么m满足条件,            	// 由于要找最大的满足条件的数,所以向右搜索                l = m;            } else {               	// 否则m不满足条件,需要向左搜索。                r = m - 1;            }        }                return l;    }}

时间复杂度 O ( log ⁡ n ) O(\log n) O(logn)

转载地址:http://flbs.baihongyu.com/

你可能感兴趣的文章
Mysql 数据库重置ID排序
查看>>
Mysql 数据类型一日期
查看>>
MySQL 数据类型和属性
查看>>
mysql 敲错命令 想取消怎么办?
查看>>
Mysql 整形列的字节与存储范围
查看>>
mysql 断电数据损坏,无法启动
查看>>
MySQL 日期时间类型的选择
查看>>
Mysql 时间操作(当天,昨天,7天,30天,半年,全年,季度)
查看>>
MySQL 是如何加锁的?
查看>>
MySQL 是怎样运行的 - InnoDB数据页结构
查看>>
mysql 更新子表_mysql 在update中实现子查询的方式
查看>>
MySQL 有什么优点?
查看>>
mysql 权限整理记录
查看>>
mysql 权限登录问题:ERROR 1045 (28000): Access denied for user ‘root‘@‘localhost‘ (using password: YES)
查看>>
MYSQL 查看最大连接数和修改最大连接数
查看>>
MySQL 查看有哪些表
查看>>
mysql 查看锁_阿里/美团/字节面试官必问的Mysql锁机制,你真的明白吗
查看>>
MySql 查询以逗号分隔的字符串的方法(正则)
查看>>
MySQL 查询优化:提速查询效率的13大秘籍(避免使用SELECT 、分页查询的优化、合理使用连接、子查询的优化)(上)
查看>>
mysql 查询数据库所有表的字段信息
查看>>