剑指offer_数组---数字在排序数组中出现的次数
来源:互联网 发布:淘宝客软件怎么下载 编辑:程序博客网 时间:2024/05/22 10:35
题目描述
统计一个数字在排序数组中出现的次数。
解题思路
二分法递归查找,一看到已排序就要想到二分
代码
/** * */package 数组;/** * <p> * Title:GetNumberOfK * </p> * <p> * Description: * </p> * * @author 田茂林 * @data 2017年8月8日 上午11:14:03 */public class GetNumberOfK { /** * @param args */ public int IntGetNumberOfK(int[] array, int k) { int count = 0; for (int i = 0; i < array.length; i++) { if (k == array[i]) { count++; } } return count; } /** * 二分法定位第一次出现的位置和最后一次出现的位置 * * @param args */ public int IntFindGetNumberOfK(int[] array, int k) { int length = array.length; if (length == 0) { return 0; } int firstK = getFirstK(array, k, 0, length - 1); int lastK = getLastK(array, k, 0, length - 1); if (firstK != -1 && lastK != -1) { return lastK - firstK + 1; } return 0; } // 递归写法 private int getFirstK(int[] array, int k, int start, int end) { if (start > end) { return -1; } int mid = (start + end) >> 1; if (array[mid] > k) { return getFirstK(array, k, start, mid - 1); } else if (array[mid] < k) { return getFirstK(array, k, mid + 1, end); } else if (mid - 1 >= 0 && array[mid - 1] == k) { return getFirstK(array, k, start, mid - 1); } else { return mid; } } // 循环写法 private int getLastK(int[] array, int k, int start, int end) { int length = array.length; int mid = (start + end) >> 1; while (start <= end) { if (array[mid] > k) { end = mid - 1; } else if (array[mid] < k) { start = mid + 1; } else if (mid + 1 < length && array[mid + 1] == k) { start = mid + 1; } else { return mid; } mid = (start + end) >> 1; } return -1; } public static void main(String[] args) { GetNumberOfK g = new GetNumberOfK(); int[] a = { 1, 2, 2, 2, 2, 2, 4, 5 }; // System.out.println(g.IntGetNumberOfK(a, 2)); System.out.println(g.IntFindGetNumberOfK(a, 2)); }}
阅读全文
0 0
- 剑指offer_数字在排序数组中出现的次数
- 剑指offer_数组---数字在排序数组中出现的次数
- 剑指Offer_面试题38_数字在排序数组中出现的次数
- 剑指offer_数组中出现次数超过一半的数字
- 【剑指offer】数字在排序数组中出现的次数
- 剑指offer--数字在排序数组中出现的次数
- 《剑指offer》数字在排序数组中出现的次数
- 剑指offer:数字在排序数组中出现的次数
- 剑指offer-数字在排序数组中出现的次数
- 剑指offer:数字在排序数组中出现的次数
- [剑指offer]数字在排序数组中出现的次数
- 剑指offer 数字在排序数组中出现的次数
- [剑指offer]数字在排序数组中出现的次数
- 剑指offer35--数字在数组排序中出现的次数
- 剑指offer|数字在排序数组中出现的次数
- 剑指offer-数字在排序数组中出现的次数
- 《剑指offer》-数字在排序数组中出现的次数
- 剑指offer - 数字在排序数组中出现的次数
- Linux下php安装Redis扩展
- HDU
- 更多想法与代码分享
- 压力测试
- 计算机网络 自顶向下方法 第二章 应用层
- 剑指offer_数组---数字在排序数组中出现的次数
- HDU-1305 Immediate Decodability (Trie 字典树 入门题)
- FPGA 那些事儿之异构计算
- 全球云IT基础设施收入大幅增长,公有云的功劳最大
- 蓝桥杯基础练习 字母图形
- ArduPilot简介
- n皇后的二进制做法
- 7-2 两个有序链表序列的合并
- web与internet的区别