1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
|
import java.util.Arrays; public class Solution { public int GetNumberOfK(int[] array, int k) { if (array.length == 0) return 0; int first = First(array, 0, array.length - 1, k); int last = last(array, 0, array.length - 1, k); System.out.println("first=" + first + " last=" + last); if (first != -1 && last != -1) return (last - first + 1); return 0; }
// 递归 public int First(int a[], int start, int end, int k) { if (start >= end) return -1; int mid = (start + end) >> 1; if (a[mid] > k) return First(a, start, mid - 1, k); else if (a[mid] < k) return First(a, mid + 1, end, k); else if (mid - 1 >= 0 && a[mid - 1] == k) return First(a, start, mid - 1, k); else return mid; }
//循环 public int last(int a[], int start, int end, int k) { int mid = (start + end) >> 1; while (start <= end) { if (a[mid] > k) end = mid - 1; else if (a[mid] < k) start = mid + 1; else if (mid + 1 <= a.length - 1 && a[mid + 1] == k) start = mid + 1; else return mid; mid = (start + end) >> 1; } return -1; } }
|
近期评论