leetcode之H-index &&H-index II

来源:互联网 发布:护肤品成分查询软件 编辑:程序博客网 时间:2024/04/30 05:41

题目略,思想相同

解答:

主要就是先排序,然后找到最大的h,在找最大的过程中,可以建模称为一个线相交题目

经过分析可以发现,最大h就是citation这个数组和size - pos(pos是数组下标,size是数组的大小)这两个线连接起来的交点

1.两条线确实有交点,并且交点的横坐标是x,那么这个时候就直接h就是size - x

2.有交点,但是交点的横坐标不是整数,这 个时候就是距离交点x最近的整点的横坐标t,h就是size - t

3.无交点,这个时候直接就是min(citation,size - pos)

综上所述,可以直接用二分搜索查找最近的相交点即可

class Solution {public:    int min(int a,int b)    {        return a < b ? a : b;    }    int hIndex(vector<int>& citations) {        int l = 0;        int size = citations.size();        if(size == 0)            return 0;        int r = size - 1;        int mid;        while(l < r)        {            mid = (l + r) >> 1;            if(citations[mid] == size - mid)                return size - mid;            else if(citations[mid] < size - mid)                l = mid + 1;            else                r = mid;        }        return min(citations[l],size - l);    }};

0 0