【数组8】数字在排序数组中出现的次数
来源:互联网 发布:渲染软件lumion 编辑:程序博客网 时间:2024/04/26 11:11
题目描述
统计一个数字在排序数组中出现的次数。
public class Solution { public int GetNumberOfK(int [] array , int k) { if(array==null||array.length<=0) return 0; int first=-1; int last=-1; //找到第一次出现的位置 for(int i=0;i<array.length;i++){ if(array[i]==k){ first=i; break; } } //第一遍查询没有k值直接返回0 if(first==-1) return 0; //找到最后一次出现的位置 for(int j=array.length-1;j>=0;j--){ if(array[j]==k){ last=j; break; } } return (last-first+1); }}
解法一:时间复杂度O(n)
public class Solution { public int GetNumberOfK(int [] nums , int k) { if(nums==null ||nums.length<=0) return 0; int len=nums.length; //只有一个数 if(len==1){ if(nums[0]==k) return 1; } int firstK=0; int lastK=0; int i=0; while(i<len){ if(nums[i]==k){ firstK=i; break; } i++; } int j=len-1; while(j>0){ if(nums[j]==k){ lastK=j; break; } j--; } //不存在K if(lastK==0 &&firstK==0){ return 0; } int times=lastK-firstK; if(times>=0) return times+1; return 0; }}
解法二:二分查找法,时间复杂度O(logn)
public class Solution { public int GetNumberOfK(int [] nums , int k) { if(nums==null||nums.length<=0) return 0; int len=nums.length; int firstK=GetFirstK(nums,0,len-1,k); int lastK=GetLastK(nums,0,len-1,k); int times=0; if(firstK>=0 &&lastK>=0) times= lastK-firstK+1; return times; } private int GetFirstK(int[]nums,int start,int end,int k){ if(start>end) return -1; int midIndex=(end+start)/2; int midVal=nums[midIndex]; if(midVal==k){ if(((midIndex>0 &&nums[midIndex-1]!=k))||midIndex==0){ return midIndex; }else{ end=midIndex-1; } }else if(midVal>k){ end=midIndex-1; }else{ start=midIndex+1; } return GetFirstK(nums,start,end,k); } private int GetLastK(int[]nums,int start,int end,int k){ if(start>end) return -1; int midIndex=(end+start)/2; int midVal=nums[midIndex]; if(midVal==k){ if(((midIndex<nums.length-1 &&nums[midIndex+1]!=k))||midIndex==nums.length-1){ return midIndex; }else{ start=midIndex+1; } }else if(midVal>k){ end=midIndex-1; }else{ start=midIndex+1; } return GetLastK(nums,start,end,k); }}
0 0
- 【数组8】数字在排序数组中出现的次数
- 【数组4】数字在排序数组中出现的次数
- 数组9:数字在排序数组中出现的次数
- 数字在排序数组中出现的次数(数组)
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 统计一个数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 在排序数组中,找出给定数字的出现次数
- 树状数组总结
- poj 1573 Robot Motion(模拟)
- poj 3070 <矩阵快速幂【模板】求Fibonacci数列>
- VC中TRACE、ASSERT和VERIFY之间的区别
- linphone-PresencePerson.java文件分析
- 【数组8】数字在排序数组中出现的次数
- 接口与设计原则
- Java关键字final、static使用总结 [GOOD]
- Redis学习笔记七——向集群节点添加、删除和分配slot
- hdu5755 Bubble Sort(树状数组or线段树)
- android Handler机制学习笔记
- 接口设计说明书模板
- 七、桥接模式Bridge(结构型)
- 顺序表应用3:元素位置互换之移位算法