/*************************************************************************
> File Name: 36_NumberOfKey.c
> Author: Juntaran
> Mail: JuntaranMail@gmail.com
> Created Time: 2016年09月03日 星期六 09时32分10秒
************************************************************************/ #include <stdio.h> // 寻找第一个Key的下标
int GetFirstKey(int* nums, int length, int key, int left, int right)
{
if (nums==NULL || length<= || left>right)
return -; int middle = (left + right) / ;
if (key == nums[middle])
{
if ((middle> && nums[middle-]!=key) || middle==)
return middle;
else
right = middle - ;
}
else if (key > nums[middle])
left = middle + ;
else
right = middle - ; return GetFirstKey(nums, length, key, left, right);
} // 寻找最后一个Key的下标
int GetLastKey(int* nums, int length, int key, int left, int right)
{
if (nums==NULL || length<= || left>right)
return -; int middle = (left + right) / ;
if (key == nums[middle])
{
if ((middle> && nums[middle+]!=key && middle<length) || middle==length-)
return middle;
else
left = middle + ;
}
else if (key > nums[middle])
left = middle + ;
else
right = middle - ; return GetLastKey(nums, length, key, left, right);
} int GetNumberOfKey(int* nums, int length, int key)
{
int count = ;
if (nums==NULL || length<=)
return ; int first = GetFirstKey(nums, length, key, , length-);
int last = GetLastKey( nums, length, key, , length-); if (first>= && last>=)
count = last - first + ; printf("count is %d\n", count);
return count;
} int main()
{
int nums[] = {, , , , , , , };
int length = ;
int key = ; GetNumberOfKey(nums, length, key);
}

剑指Offer36 数字在排序数组中出现的次数的更多相关文章

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

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

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

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

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

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

  4. 用java刷剑指offer(数字在排序数组中出现的次数)

    题目描述 统计一个数字在排序数组中出现的次数. 牛客网链接 java代码 //看见有序就用二分法 public class Solution { public int GetNumberOfK(int ...

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

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

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

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

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

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

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

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

  9. 【Java】 剑指offer(53-1) 数字在排序数组中出现的次数

    正文 本文参考自<剑指offer>一书,代码采用Java语言. 更多:<剑指Offer>Java实现合集   题目 统计一个数字在排序数组中出现的次数.例如输入排序数组{1, ...

随机推荐

  1. IIS7下.NET4.0 网站UrlRewriter.dll重写无后缀路径 失效

    解决方法: 1.添加通配符脚本映射,选择:C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll 2.找到和网站相对的连接池,选择 ...

  2. jQuery 的选择器

    本文来自网上转帖 1. 基础选择器 Basics 名称 说明 举例 #id 根据元素Id选择 $("divId") 选择ID为divId的元素 element 根据元素的名称选择, ...

  3. 说下Fedora下把SpiderMonkey放入Eclipse内编译的过程

    首先要知道SpiderMonkey是个什么玩意 详细的可以看看这里(当然,如果你有google翻译的话看起来也一样费劲,你可以在语言那里选择中文.看完了再转回英文-因为中文有很多文档都没有的,比如:B ...

  4. NAND flash NOR flash SDRAM区别

    nand flash:适合大容量数据存储,类似硬盘:nor flash:适合小容量的程序或数据存储,类似小硬盘:sdram:主要用于程序执行时的程序存储.执行或计算,类似内存. 区别:nor flas ...

  5. Visual Studio无法添加断点

    今天在写代码的时候突然发现无法添加断点,更加详细的场景是“按F9可以添加调试行,但是断点不显示,且显示代码行数左边的灰色区域不见了”找了各种方法也没有解决,然后重启.修复甚至重装都不行,最后在万千网页 ...

  6. C#:Func的同步、异步调用(转)

    实际开发中,对于一些耗时较长的操作,我们往往会将其封装成异步方式调用,以加速系统响应或改善用户体验,下面是一个示例: 有一个现成的类MyMath,里面有一个Add方法: 1 public class ...

  7. ASP.NET 最佳DataGrid读取单元格的值

    采用asp:BoundColumn列 前台: <asp:BoundColumn DataField="UserID" HeaderText="工号"> ...

  8. Codeforces Round #342 (Div. 2) B. War of the Corporations 贪心

    B. War of the Corporations 题目连接: http://www.codeforces.com/contest/625/problem/B Description A long ...

  9. Codeforces Gym 100463B Music Mess Hash 逻辑题

    Music Mess Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://codeforces.com/gym/100463/attachments ...

  10. Vs2008几个快捷键

    CTRL+M 收缩 格式化cs代码:Ctrl+k+f    格式化aspx代码:Ctrl+k+d 5. 怎样快速切换不同的窗口? Ctrl+Tab   7. 怎样快速添加代码段? 输入prop然后按两 ...