剑指Offer--数组在排序数组中出现的次数--二分查找的应用

来源:互联网 发布:mac谷歌浏览器安插件 编辑:程序博客网 时间:2024/05/17 21:41

统计一个数字在排序数组中出现的次数。




package 剑指offerfrom27题;import java.util.HashMap;public class 数组在排序数组中出现的次数 {public static void main(String[] args) {// TODO Auto-generated method stub//int arrar[] = { 1, 2, 3, 3, 3, 3, 4, 5 };int arrar[] = { 1, 2, 3, 4, 5 };//int arrar[] = {3,3,3,3,4,5};System.out.println(GetNumberOfK2(arrar, 5));}public int GetNumberOfK(int[] array, int k) {if (array.length == 0 || array == null) {return 0;}HashMap<Integer, Integer> hashMap = new HashMap<>();for (int i = 0; i < array.length; i++) {if (hashMap.containsKey(array[i])) {int value = hashMap.get(array[i]);hashMap.put(array[i], value + 1);} else {hashMap.put(array[i], 1);}}int number = 0;if (hashMap.containsKey(k)) {number = hashMap.get(k);}return number;}public static int GetNumberOfK2(int[] array, int k) {if (array.length == 0 || array == null) {return 0;}int low = 0;int high = array.length - 1;int mid = (low + high) / 2;int start = 0;int end = 0;/*二分查找找到k的位置*/while (array[mid] != k) {if (low==high) {//找不到k的时候break;}if (array[mid] > k) {high = mid - 1;}if (array[mid] < k) {low = mid + 1;}mid = (high + low) / 2;}if (array[mid]==k) {start = mid;end = mid + 1;while (start >= 0 &&array[start] == k ) {start--;}while (end < array.length && array[end] == k) {end++;}return end - start -1;}return 0;}}


阅读全文
0 0
原创粉丝点击