数字在已排序数组中出现的次数
提交网址: http://www.nowcoder.com/practice/70610bf967994b22bb1c26f9ae901fa2?tpId=13&tqId=11190
参与人数:2597    时间限制:1秒   空间限制:32768K
本题知识点: 数组
题目描述
统计一个数字在已排序数组中出现的次数。
样例输入:
2 3 3 3 3 4 51
3
6,5,3,3,1,0
3
样例输出:
4
2

分析:
      数字在排序数组中出现的次数,首先想到的方法应该是用hash表,计算出数组中所有数据出现的次数,然后直接查找,时间复杂度O(n),空间复杂度O(n)。但这种方法未能利用该数组是已排序的特点,所以如果输入是已排好序的题目,要及时联想到二分查找。

具体步骤:先用二分法找到某个目标值k出现的位置,然后统计前面一半中k出现的次数sum1,后面一半中k出现的次数sum2,最后sum=sum1+1+sum2。二分查找时间复杂度是O(logn)。

AC代码:

#include<cstdio>
#include<vector>
using namespace std;
class Solution {
public:int GetNumberOfK(vector<int> data, int k) {int idx = biSearch(data,0, (int)data.size(), k);   // 某个k的位置为idx if(idx == -1) return 0;  // 未找到 int sum = 1; // 如果能找到1个k,sum初始化为1 for(int j = idx - 1; j >= 0; j--){  // 统计之前的那个k所在位置idx的前面k出现的次数 if(data[j] == k) sum++;else break;}for(int j = idx + 1; j < (int)data.size(); j++){  // 统计之前的那个k所在位置idx的后面k出现的次数if(data[j] == k) sum++;else break;}return sum;}     int biSearch(vector<int> &data, int begin, int end, int k){if(begin >= end) return -1;int mid = (begin + end)/2;if(data[mid] == k) return mid;  // 如果在区间mid处找到,提前返回;否则递归地在前一半去找,否则在后一半去找,总能找到 int pos1, pos2 = -1;pos1 = biSearch(data,begin,mid,k); if(pos1 != -1) return pos1;pos2 = biSearch(data,mid + 1, end,k); if(pos2 != -1) return pos2;              return -1;}
};
// 以下为测试
int main()
{Solution sol;vector<int> vec1={1,3,4,5};vector<int> vec2={6,5,3,3,1,0};  int res1 = sol.GetNumberOfK(vec1, 4);int res2 = sol.GetNumberOfK(vec2, 3);    printf("%d\n", res1); printf("%d\n", res2);     return 0;
}

转载于:https://www.cnblogs.com/enjoy233/p/10408796.html

C++版 - 剑指offer面试题38:数字在已排序数组中出现的次数相关推荐

  1. 二维数组的空间复杂度_剑指 offer 面试题精选图解 04 . 二维数组中的查找

    点击关注上方"图解面试算法", 设为"置顶或星标",一起刷 LeetCode. 作者:程序员吴师兄 今天分享的题目来源于 LeetCode 上的剑指 Offer ...

  2. 剑指offer——面试题38:数字在排序数组中出现的次数

    剑指offer--面试题38:数字在排序数组中出现的次数 20180906整理 Solution1: [注意]先利用二分查找扎到一个值然后再顺序遍历的做法时间复杂度也是O(n)O(n)O(n),代码也 ...

  3. C++版 - 剑指Offer 面试题36:数组中的逆序对及其变形(Leetcode 315. Count of Smaller Numbers After Self)题解

    剑指Offer 面试题36:数组中的逆序对 题目:在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 例如, 在数组{7,5, ...

  4. C++版 - 剑指offer 面试题39:判断平衡二叉树(LeetCode 110. Balanced Binary Tree) 题解

    剑指offer 面试题39:判断平衡二叉树 提交网址:  http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222?tpId= ...

  5. C++版-剑指offer 面试题6:重建二叉树(Leetcode105. Construct Binary Tree from Preorder and Inorder Traversal) 解题报告

    剑指offer 重建二叉树 提交网址:  http://www.nowcoder.com/practice/8a19cbe657394eeaac2f6ea9b0f6fcf6?tpId=13&t ...

  6. 剑指offer 面试题32 从1到n整数中1出现的次数

    题目链接: 剑指offer啊 题目描述: 输入N, 求从1到n整数中1出现的次数 解题思路: 一开始的想法只能是暴力, 但是自己太蠢了啊, 看了看剑指offer上的做法就是巧妙的利用了递归...... ...

  7. 剑指Offer - 面试题38. 字符串的排列(全排列,排序,回溯+剪枝)

    1. 题目 输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素. 示例: 输入:s = "abc" 输出:["ab ...

  8. 剑指offer面试题38. 字符串的排列(回溯)

    题目描述 **输入一个字符串,打印出该字符串中字符的所有排列. 你可以以任意顺序返回这个字符串数组,但里面不能有重复元素.** 思路 详见链接 代码 class Solution:def permut ...

  9. [剑指offer]面试题第[45]题[JAVA][把数组排成最小的数][快排][ Comparator][PriorityQueue]

    [问题描述][中等] [解答思路] 1. 快速排序 时间复杂度:O(N^2) 空间复杂度:O(1) class Solution {public String minNumber(int[] nums ...

最新文章

  1. cssbefore图片大小_两小时学会CSS-before after 伪元素
  2. Spring Boot 整合 Freemarker
  3. 网元——就是网络中的元素,网络中的设备。总之,网元是网络管理中可以监视和管理的最小单位...
  4. python django 表单_Django-表单处理
  5. flutter - URL出现在网站名称的位置
  6. Android Broadcast Security
  7. Excel 2007 Open XML文件结构(2)
  8. 下降沿触发的jk触发器(带异步复位和置位功能)_边沿触发器 || D触发器 || JK触发器 || 逻辑功能转换 工作特性 || 重难点 || 数电...
  9. [BZOJ1088] [SCOI2005] 扫雷Mine
  10. Windows系统安装adb/fastboot驱动教程
  11. Springboot定时任务、Quartz表达式
  12. 中国十大电商网站优势与劣势分析
  13. Emakefile--快速编译
  14. 关于电子科技大学寝室电费缴费情况和满意度的调研
  15. 循迹小车智能搬运:调车篇
  16. python求圆的周长和面积
  17. 【链表】 链表的基本概念及分类
  18. 【The Zen of Python, by Tim Peters. Python之禅】
  19. Go: 关于锁(mutex)的一些使用注意事项
  20. Kafka可视化管理工具kafka-manager部署安装和使用-已更名为CMAK

热门文章

  1. 详解vue项目和普通项目如何解决开发环境与生产环境下的跨域问题
  2. DNN结构演进History—CNN-GoogLeNet :Going Deeper with Convolutions
  3. 关于Django综述
  4. 微软更懂“怎样尊重程序员”,正在改进程序员招聘流程
  5. 8. Python 数据类型
  6. 异数OS 2017 DPDK 峰会观后感
  7. System.nanoTime
  8. Python 类继承,__bases__, __mro__, super
  9. PHP高性能输出UNICODE正则汉字列表 汉字转拼音多音字解决方案 搜索引擎分词细胞词库更新 搜狗词库提取TXT...
  10. 一个IP绑定多个域名(虚拟主机)设置方法