面试题 38: 数字在排序数组中出现的次数
来源:互联网 发布:java 网络爬虫框架 编辑:程序博客网 时间:2024/06/06 04:55
一. 题目
统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5} 和数字3,由于3在这个数组中出现了4次,因此输出4.
代码请到我的代码库中下载 Point2Offer
二. 代码
package ween_2;/**难度系数:*** * 剑指offer: 数字在排序数组中出现的次数 * 方法:二分查找 * 测试用例:功能测试(不存在,存在1次,多次,最大值,最小值) * 特殊输入测试(数组为空,数组中只有一个数字) * @author dingding * Date:2017-6-27 20:00 * Declaration: All Rights Reserved! */public class No38 { public static void main(String[] args) { test1(); test2(); test3(); test4(); test5(); test6(); test7(); } //返回第一个k的下标 private static int getFirstK(int[] array,int length,int k,int start,int end){ if (start>end) { return -1; } int middleIndex = (start+end)/2; int middleData = array[middleIndex]; if (middleData == k) { if ((middleIndex > 0 && array[middleIndex-1]!=k) || middleIndex==0) { return middleIndex; }else { end = middleIndex-1; } }else if (middleData>k) { end = middleIndex - 1; }else { start = middleIndex + 1; } return getFirstK(array, length, k, start, end); } //返回最后一个k的下标 private static int getLastK(int[] array,int length,int k,int start,int end){ if (start>end) { return -1; } int middleIndex = (start+end)/2; int middleData = array[middleIndex]; if (middleData==k) { if ((middleIndex<length-1 && array[middleIndex+1]!=k) || middleIndex==length-1) { return middleIndex; }else { start = middleIndex+1; } }else if(middleData<k){ start = middleIndex + 1; }else { end = middleIndex - 1; } return getLastK(array, length, k, start, end); } //计算出现的次数 private static int getNumberOfK(int[] array,int length,int k){ int number = 0; if (array == null || length<1) { return -1; } if (array != null && length>0) { int first = getFirstK(array, length, k, 0, length-1); int last = getLastK(array, length, k, 0, length-1); if (first>-1 && last > -1) { number = last - first +1; } } return number; } /*==================测试用例================*/ private static void test(int[] array,int length,int k){ int result = getNumberOfK(array, length, k); if (result != -1) { System.out.println(k+"出现的次数为: "+ result); }else{ System.out.println("不是有效输入!"); } System.out.println("===================="); } private static void test1() { int[] array = {1,2,3,4,5,5,6}; int k=7; test(array, array.length, k); } private static void test2() { int[] array = {1,2,3,4,5,5,6}; int k=3; test(array, array.length, k); } private static void test3() { int[] array = {1,2,3,4,5,5,6}; int k=5; test(array, array.length, k); } private static void test4() { int[] array = {1,2,3,4,5,5,6}; int k=6; test(array, array.length, k); } private static void test5() { int[] array = {1,2,3,4,5,5,6}; int k=1; test(array, array.length, k); } private static void test6() { int[] array = {1}; int k=1; test(array, array.length, k); } private static void test7() { int[] array = {}; int k=6; test(array, array.length, k); }}
有不妥当之处,麻烦告知:D
阅读全文
0 0
- 【面试题】数字在排序数组中出现的次数
- 面试题38:数字在排序数组中出现的次数
- [剑指offer][面试题38]数字在排序数组中出现的次数
- 面试题38:数字在排序数组中出现的次数
- 剑指Offer:面试题38 数字在排序数组中出现的次数
- 面试题38:数字在排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 面试题38:数字在排序数组中出现的次数
- 剑指offer 面试题38—数字在排序数组中出现的次数
- 《剑指Offer》学习笔记--面试题38:数字在排序数组中出现的次数
- 【剑指Offer学习】【面试题38:数字在排序数组中出现的次数】
- 面试题38_数字在排序数组中出现的次数
- 剑指Offer面试题38(Java版):数字在排序数组中出现的次数
- 剑指offer-面试题38:数字在排序数组中出现的次数
- 剑指offer之面试题38数字在排序数组中出现的次数
- 剑指offer面试题38:数字在已排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 剑指Offer----面试题38:数字在排序数组中出现的次数
- ThreadPoolExcutor(线程池)初识
- JSP中四种属性范围
- 前端HTML面试题总结(HTML知识点)
- 宗教信仰
- linux 调整分区大小
- 面试题 38: 数字在排序数组中出现的次数
- java泛型作用
- 网络编程中最简单的TCP通信(CS模型)
- TCP Windows and Window Scaling
- js中in关键字(路漫漫兮修远兮)
- Intellij IDEA快捷键
- 工作或练习错误记录
- 典型数据库架构设计与实践
- mysql