数字在排序数组中出现的次数

来源:互联网 发布:360软件助手苹果 编辑:程序博客网 时间:2024/06/03 22:29

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

package com.google.android;public class CountK {public static void main(String[] args) {int[] data = { 1, 2, 3, 3, 3, 3, 4, 5 };int count = getCountK(data, 3);System.out.println(count);}private static int getCountK(int[] data, int k) {if (data == null || data.length == 0) {return 0;}int firstK = getFirstK(data, 0, data.length - 1, k);int lastK = getLastK(data, 0, data.length - 1, k);int count = 0;if (firstK > -1 && lastK > -1) {count = lastK - firstK+1;}return count;}private static int getLastK(int[] data, int start, int end, int k) {if (start > end) {return -1;}int middleIndex = (start + end) / 2;int middleData = data[middleIndex];if (middleData == k) {// 后边界if ((middleIndex < data.length - 1 && data[middleIndex + 1] != k)|| middleIndex == data.length - 1) {return middleIndex;} else {start = middleIndex + 1;}} else if (middleData > k) {start = middleIndex + 1;} else {end = middleIndex - 1;}return getLastK(data, start, end, k);}private static int getFirstK(int[] data, int start, int end, int k) {if (start > end) {return -1;}int middleIndex = (start + end) / 2;int middleData = data[middleIndex];if (middleData == k) {if (middleIndex > 0 && data[middleIndex - 1] != k) {return middleIndex;} else {end = middleIndex - 1;}} else if (middleData > k) {end = middleIndex - 1;} else {start = middleIndex + 1;}return getFirstK(data, start, end, k);}}


0 0
原创粉丝点击