数字在排序数组中出现的次数
来源:互联网 发布:仿真画笔手绘软件 编辑:程序博客网 时间:2024/05/16 14:04
题目
统计一个数字在排序数组中出现的次数。
思路1
有序数组,二分查找,得到连续所求数的某一个位置
根据所求位置上下取限
public int GetNumberOfK(int [] array , int k) { if(array==null||array.length==0) return 0; int lo=0, hi=array.length-1; if(array[0]==k&&array[hi]==k) return hi+1; int mid = 0; while(lo<=hi){ //二分查找 mid = (lo+hi)/2; if(array[mid]<k) lo=mid+1; else if(array[mid]>k) hi=mid-1; else lo = hi+1; } if(array[mid]!=k) return 0; while(array[mid]==k&&mid<hi) mid++; int i = array[hi]==k?hi:--mid; while(array[mid]==k&&mid>0) mid--; return array[0]==k?(i-mid+1):(i-mid); }
思路2
二分查找获取上下限位置
链接:https://www.nowcoder.com/questionTerminal/70610bf967994b22bb1c26f9ae901fa2来源:牛客网//因为data中都是整数,所以可以稍微变一下,不是搜索k的两个位置,而是搜索k-0.5和k+0.5//这两个数应该插入的位置,然后相减即可。class Solution {public: int GetNumberOfK(vector<int> data ,int k) { return biSearch(data, k+0.5) - biSearch(data, k-0.5) ; }private: int biSearch(const vector<int> & data, double num){ int s = 0, e = data.size()-1; while(s <= e){ int mid = (e - s)/2 + s; if(data[mid] < num) s = mid + 1; else if(data[mid] > num) e = mid - 1; } return s; }};
阅读全文
0 0
- 【数组8】数字在排序数组中出现的次数
- 【数组4】数字在排序数组中出现的次数
- 数组9:数字在排序数组中出现的次数
- 数字在排序数组中出现的次数(数组)
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字的出现次数
- 统计一个数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 在排序数组中,找出给定数字的出现次数
- 在排序数组中,找出给定数字出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 数字在排序数组中出现的次数
- 在排序数组中,找出给定数字的出现次数
- 第四章 面向切面的Spring
- vim下ctags的使用
- BIO 实例代码
- JasperReport| JasperReport Studio操作(上)
- 欢迎使用CSDN-markdown编辑器
- 数字在排序数组中出现的次数
- (二)什么是Reactor模式
- 在maven 项目中引入jquery报错
- Spring
- 模拟之全排列的第k个字典序
- 函数调用堆栈--读书笔记2
- poj 1251(prim基础题)
- Activity的四种启动模式
- 和老师一起学习javaScript,第一天