题目描述

统计一个数字在排序数组中出现的次数。

牛客网链接

java代码

//看见有序就用二分法
public class Solution {
public int GetNumberOfK(int [] array , int k) {
int len = array.length;
if (len == 0) return 0;
int low = getFirst(array, k, 0, len-1);
int high = getEnd(array, k, 0, len-1);
if (low != -1 && high != -1) return high - low + 1;
return 0;
}
//递归
private int getFirst(int [] array, int k, int low, int high) {
if (low > high) return -1;
int mid = (low + high) >> 1;
if (array[mid] > k) return getFirst(array, k, low, mid-1);
else if (array[mid] < k) return getFirst(array, k, mid+1, high);
else if (mid-1>=0 && array[mid-1] == k) return getFirst(array, k, low, mid-1);
else return mid;
}
//循环
private int getEnd(int[] array, int k, int low, int high) {
int mid = (low + high) >> 1;
while (low <= high) {
if (array[mid] < k) low = mid+1;
else if (array[mid] > k) high = mid-1;
else if (mid + 1 < array.length && array[mid + 1] == k) low = mid+1;
else return mid;
mid = (low + high) >> 1;
}
return -1;
}
}

用java刷剑指offer(数字在排序数组中出现的次数)的更多相关文章

  1. 剑指Offer——数字在排序数组中出现的次数

    题目描述: 统计一个数字在排序数组中出现的次数. 分析: 二分变形.二分查找最左边和最右边k的位置,然后相减加一就是结果. 代码: class Solution { public: int GetNu ...

  2. 剑指 Offer——数字在排序数组中出现的次数

    1. 题目 2. 解答 时间复杂度为 \(O(n)\) 的算法,顺序遍历数组,当该数字第一次出现时开始记录次数. class Solution { public: int GetNumberOfK(v ...

  3. 剑指offer 数字在排序数组中出现的次数

    因为有序 所以用二分法,分别找到第一个k和最后一个k的下标.时间O(logN) class Solution { public: int GetNumberOfK(vector<int> ...

  4. 剑指Offer-36.数字在排序数组中出现的次数(C++/Java)

    题目: 统计一个数字在排序数组中出现的次数. 分析: 给定一个已经排好序的数组,统计一个数字在数组中出现的次数. 那么最先想到的可以遍历数组统计出现的次数,不过题目给了排序数组,那么一定是利用了排序这 ...

  5. 剑指offer--34.数字在排序数组中出现的次数

    时间限制:1秒 空间限制:32768K 热度指数:209611 本题知识点: 数组 题目描述 统计一个数字在排序数组中出现的次数. class Solution { public: int GetNu ...

  6. 剑指Offer36 数字在排序数组中出现的次数

    /************************************************************************* > File Name: 36_Number ...

  7. 剑指offer38 数字在排序数组中出现的次数

    这种方法没用迭代,而是使用了循环的方式 class Solution { public: int GetNumberOfK(vector<int> data ,int k) { if(da ...

  8. 剑指offer——56在排序数组中查找数字

    题目描述 统计一个数字在排序数组中出现的次数.   题解: 使用二分法找到数k然后向前找到第一个k,向后找到最后一个k,即可知道有几个k了 但一旦n个数都是k时,这个方法跟从头遍历没区别,都是O(N) ...

  9. 剑指offer-数字在排序数组中出现的次数-数组-python

    题目描述 统计一个数字在排序数组中出现的次数.   python 内置函数 count()一行就能搞定   解题思路 二分查找到给定的数字及其坐标.以该坐标为中点,向前向后找到这个数字的 始 – 终 ...

随机推荐

  1. 查找k8s版jenkins-slave官方镜像

    官方镜像非常多,如果查找某个单词没有找到的话,可以换一个词查找,总之各种非常的多,带maven.djk.kubectl工具的镜像,都去试试吧, 从下面查找结果中可以看到,还有centos版的jenki ...

  2. close yarn install --check-files

    To disable this check, please add `config.webpacker.check_yarn_integrity = false` to your Rails deve ...

  3. (C#)Application.Exit()、Environment.Exit(0)区别

    Application.Exit:通知winform消息循环退出.会在所有前台线程退出后,退出应用 强行退出方式,就像 Win32 的 PostQuitMessage().它意味着放弃所有消息泵,展开 ...

  4. 【视频开发】 ffmpeg支持的硬解码接口

    To enable DXVA2, use the --enable-dxva2 ffmpeg configure switch. To test decoding, use the following ...

  5. Java内存模型——方法区

    方法区(Method Area) ①      对每个加载的类型,JVM必须在方法区中存储以下类信息: 1)        这个类型的完整有效名(类型信息) 类型名称在Java类文件和JVM中都以完整 ...

  6. 14-2 SQL语言简介

    1.结构化查询语言(Structured Query Language,SQL),常被读作sequel,最初是由Microsoft.Sybase和Ashton-Tate这3家公司共同开发的. 2.Wi ...

  7. golang实现路由中间件middleware

    registerHandlers.go package router import ( "../ctrl" "../funcs" "github.co ...

  8. day31-python之内置函数

    1.udp多线程 import socketserver class MyServer(socketserver.BaseRequestHandler): def handle(self): prin ...

  9. 从汇编语言写到c语言

    好了,言归正传,裸机程序没有操作系统的支持,想要用c语言,就只能先使用汇编语言手动配置c语言需要的环境,听起来很高大上,其实需要做的很简单:指定堆栈指针的值就好. 那么完成这个简单的事情之前,先要明白 ...

  10. Java网上学习资料

    1.今天查找关于代理模式时找到的两个网站:take control with proxy design pattern