题目描述

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

题目分析

这题用暴力解也可以过,不过面试官肯定期待更好的解法。

查找我们最熟悉的就是二分查找了,不过二分查找查找的数在数组中只有一个,我们这里却有很多个,是一段。所以我们要确定找的数的开始位置和结束位置

主要就是判断的条件,当a[mid]的值等于k时,指针该如何走。

代码

function GetNumberOfK(data, k) {
if (getEnd(data, k) === -1 && getBegin(data, k) === -1) return 0;
return getEnd(data, k) - getBegin(data, k) + 1;
}
function getBegin(data, k) {
let [left, right] = [0, data.length - 1];
let mid = left + right >> 1;
while (left <= right) {
if (data[mid] > k) {
right = mid - 1;
} else if (data[mid] < k) {
left = mid + 1;
} else if (mid - 1 >= 0 && data[mid - 1] === k) {
right = mid - 1;
} else return mid;
mid = left + right >> 1;
}
return -1;
}
function getEnd(data, k) {
let [left, right] = [0, data.length - 1];
let mid = left + right >> 1;
while (left <= right) {
if (data[mid] > k) {
right = mid - 1;
} else if (data[mid] < k) {
left = mid + 1;
} else if (mid + 1 < data.length && data[mid + 1] === k) {
left = mid + 1;
} else return mid;
mid = left + right >> 1;
}
return -1;
}

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

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

    题目描述 统计一个数字在排序数组中出现的次数. 题目地址 https://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId ...

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

    题目描述 统计一个数字在排序数组中出现的次数. [思路]因为是排序数组,所以可以用二分法搜索到要查找的值在数组中的一个位置,接着向两侧扫描,遇到不等的就停止. class Solution { pub ...

  3. 【剑指Offer】数字在排序数组中出现的次数 解题报告(Python)

    [剑指Offer]数字在排序数组中出现的次数 解题报告(Python) 标签(空格分隔): 剑指Offer 题目地址:https://www.nowcoder.com/ta/coding-interv ...

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

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

  5. Go语言实现:【剑指offer】数字在排序数组中出现的次数

    该题目来源于牛客网<剑指offer>专题. 统计一个数字在排序数组中出现的次数. 看到排序数组,要想到用二分查找. 先找到最前面的数字k,再找到最后面的数字k,通过下标求出次数. Go语言 ...

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

    2013-09-02 16:28:35 找出数字在排序数组中出现的次数. 注意几点: 一开始试图用size_t类型表示数组的下标begin.end,到那时这样做在end = 0时,end - 1是si ...

  7. 剑指offer: 38 数字在排序数组中出现的次数

    题目描述 统计一个数字在排序数组中出现的次数.例如输入排序数组{1,2,3,3,3,3,4,5} 和数字3,输出4. 思路如下 1. 预估时间复杂度,最复杂情况是,顺序扫描,统计K出现的次数,时间复杂 ...

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

    统计一个数字在排序数组中出现的次数. 首先吐槽下出题人的用词,啥叫排序数组?"排序"是个动词好么,"有序"作为一个形容词表示状态,修饰"数组" ...

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

    题目描述: 统计一个数字在排序数组中出现的次数. 思路分析: 1. 直观思路是直接遍历一遍,统计.复杂度也只要O(n). 2. 显然这道题要考察的内容不这么简单,实际上考虑二分的思想来完成.分别二分查 ...

  10. 【剑指offer】数字在排序数组中出现的次数,C++实现

    原创博文,转载请注明出处! # 题目 # 思路 利用二分查找法,查找元素k在排序数组中第一次出现的位置m及最后一次出现的位置n,m-n+1即为元素k再排序数组中出现的次数.       二分查找法在数 ...

随机推荐

  1. <?php if($value['udertype'] == 0) {?> <td>超级管理员</td> <?php } else if ($value['udertype'] == 1)

    <?php if($value['udertype'] == 0) {?> <td>超级管理员</td> <?php } else if ($value['u ...

  2. 1、js基础内容

    js基础内容 1. 编辑器 编译环境 浏览器 编辑软件 sublime DW H5Build Atom ==[注]尽可能多的去使用编辑器去编辑代码.== Html+css ==JS 逻辑== 比作建设 ...

  3. android不知不觉偷拍他人功能实现(手机关闭依然拍照)【申明:来源于网络】

    android不知不觉偷拍他人功能实现(手机关闭依然拍照)[申明:来源于网络] 地址:http://blog.csdn.net/huangxiaoguo1/article/details/536660 ...

  4. 怎么把mkv转成mp4,有什么方法

    Mkv怎样转换成MP4呢?mkv是一种开放标准的自由的容器和文件格式,是一种多媒体封装格式,能够在一个文件中容纳无限数量的视频.音频.图片或字幕轨道.所以其不是一种压缩格式,而是Matroska定义的 ...

  5. 基于 ASP.NET Core 2.1 的 Razor Class Library 实现自定义错误页面的公用类库

    注意:文中使用的是 razor pages ,建议使用 razor views ,使用 razor pages 有一个小坑,razor pages 会用到 {page} 路由参数,如果应用中也用到了这 ...

  6. 实现Linux下的ls和ls-l

    ls的C语言代码实现 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #includ ...

  7. ubuntu下安装thrift

    configure: error: "Error: libcrypto required."

  8. POJ 2689 - Prime Distance - [埃筛]

    题目链接:http://poj.org/problem?id=2689 Time Limit: 1000MS Memory Limit: 65536K Description The branch o ...

  9. windows加固

    1. 账户管理和认证授权 1.1 账户 默认账户安全 禁用Guest账户. 禁用或删除其他无用账户(建议先禁用账户三个月,待确认没有问题后删除.) 操作步骤 打开 控制面板 > 管理工具 > ...

  10. rimraf 跨平台删除文件

    利用npm script 来删除文件, "scripts": { "clear": "rm -rf dist" } 但存在一个问题,remo ...