剑指Offer(第二版)面试题53:在排序数组中查找数字出现的次数
来源:互联网 发布:javascript难不难 编辑:程序博客网 时间:2024/06/03 06:51
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/74065254冷血之心的博客)
剑指Offer(第二版)面试题53:在排序数组中查找数字出现的次数
题目一:数字在排序数组中出现的次数
统计一个数字在排序数组中出现的次数。例如,输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,所以输出4.
思路一:
最直观的想法,遍历一遍该数组,统计出现的次数,时间复杂度为O(N),可以先和面试官说一下,就说这是最直观的解法(面试官会觉得这小伙子思维比较敏捷,哈哈~)
思路二:
看到排序数组,必须敏锐的想到可以使用二分查找算法。二分算法,我们先比较中间的值和目标target的关系,然后分区间找出该数组中第一次出现目标target和最后一次出现target的位置,两者相减即为该目标出现的次数。整体的时间复杂度为O(logN)
思路一代码:
public int GetNumberOfK(int [] array , int k) { if(array==null||array.length==0) return 0; int count = 0; for(int i =0;i<array.length;i++){ if(array[i]==k) count++; } return count; }
思路二代码:
public int GetNumberOfK(int[] array , int target) {if(array==null||array.length==0)return 0; return getCount(array,0,array.length-1,target);}private int getCount(int[] array, int start, int end, int target) {if(array==null||array.length==0)return -1;if(start>end) // 先判断start和end的关系,防止mid大于数组长度,出现空指针异常return 0;int mid = start+(end-start)/2;int midValue = array[mid];if(midValue>target)return getCount(array, start, mid-1, target);else if (midValue<target) return getCount(array, mid+1, end, target);elsereturn 1+getCount(array, start, mid-1, target)+getCount(array, mid+1, end, target);}
题目二:0~n-1中缺失的数字
一个长度为n-1的递增排序数组中的所有数字都是唯一的,并且每个数字都在范围0~n-1之内。在范围0~n-1范围内的n个数字中有且只有一个数字不在该数组中,请找出该数字。
题目三:数组中数值和下标相等的元素。
假设一个单调递增的数组里边的每个元素都是整数并且是唯一的。请实现一个函数,找出数组中任意一个数值等于其下标的元素。例如在数组{-3,-1,1,3,5}中,数字3和它的下标相等。
以上两个题目几乎就是标准的二分查找算法哦~
如果对你有帮助,记得点赞哦~欢迎大家关注我的博客,可以进群366533258一起交流学习哦~
本群给大家提供一个学习交流的平台,内设菜鸟Java管理员一枚、精通算法的金牌讲师一枚、Android管理员一枚、蓝牙BlueTooth管理员一枚、Web前端管理一枚以及C#管理一枚。欢迎大家进来交流技术。
- 剑指Offer(第二版)面试题53:在排序数组中查找数字出现的次数
- 【剑指offer】面试题53(1):数字在排序数组中出现的次数
- 剑指Offer面试题38(Java版):数字在排序数组中出现的次数
- 剑指Offer面试题38(Java版):数字在排序数组中出现的次数
- 【剑指offer】面试题 53:数字在排序数组中出现的次数
- 数字在排序数组中出现的次数(剑指offer面试题56)
- 剑指Offer(第二版)面试题56:数组中数字出现的次数
- [剑指offer][面试题38]数字在排序数组中出现的次数
- 剑指Offer:面试题38 数字在排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 剑指offer 面试题38—数字在排序数组中出现的次数
- 《剑指Offer》学习笔记--面试题38:数字在排序数组中出现的次数
- 【剑指Offer学习】【面试题38:数字在排序数组中出现的次数】
- 《剑指Offer》面试题:统计一个数字在排序数组中出现的次数
- 剑指offer-面试题38:数字在排序数组中出现的次数
- 剑指offer之面试题38数字在排序数组中出现的次数
- 剑指offer面试题38:数字在已排序数组中出现的次数
- 剑指offer面试题38:数字在排序数组中出现的次数
- 从零开始学习分类器到实现
- Linux下MySQL数据库常用基本操作
- Centos 配置eth0 提示Device does not seem to be present
- git flow 工作流
- 用arp.sh脚本文件抓取局域网内所有主机的IP和MAC地址
- 剑指Offer(第二版)面试题53:在排序数组中查找数字出现的次数
- ubantu 配置<<深入理解计算机系统>>的 C语言编程环境
- 【论文笔记】Efficient Inference in Fully Connected CRFs with Gaussian Edge Potentials
- iOSApp Store加急审核
- 剑指offer——字符串转数字(奥妙各种)(没有考虑科学计数法的情况)(好题)
- Ubuntu16.04系统中安装软件
- Activity反转后,Activity的生命周期的变化
- Linux GCC 进程创建
- 【BZOJ】1050 [HAOI2006]旅行comf 并查集