H index II

https://leetcode.com/problems/h-index-ii/

Solution I : Binary search

public class Solution { public int hIndex(int[] citations) { int start = 0; int end = citations.length-1; int len = citations.length; int result = 0; int mid; while(start <= end){ mid = start + (end-start)/2; if(citations[mid] >= (len - mid)){ result = (len-mid); // nice trick if cant find the exact equal condition end = mid-1; } else{ start = mid + 1; } } return result; } }

Solution II: Standard binary search

Mind the equal condition

public class Solution { public int hIndex(int[] citations) { if(citations == null || citations.length == 0) return 0; int l = 0, r = citations.length; int n = citations.length; while(l < r){ int mid = l + (r - l) / 2; if(citations[mid] == n - mid) return n - mid; if(citations[mid] < citations.length - mid) l = mid + 1; else r = mid; } return n - l; } }

public int hIndex(int[] citations) { int l = 0, r = citations.length - 1; for (int m = (l + r) / 2; l <= r; m = (l + r) / 2) if (citations[m] < citations.length - m) l = m + 1; else r = m - 1; return citations.length - l; }

Check out more methods:

https://leetcode.com/discuss/56122/standard-binary-search

results matching ""

    No results matching ""