在排序数组中查找数字
题目:数字在排序数组中出现的次数。
统计一个数字在排序数组中出现的次数。例如,输入排序数组{1,2,3,3,3,3,4,5}和数字3,由于3在这个数组中出现了4次,因此输出4.
- int GetNumberOfK(const int* data, int length, int k)
{
int number = 0;
if(data != nullptr && length > 0)
{
int first = GetFirstK(data, length, k, 0, length - 1);
int last = GetLastK(data, length, k, 0, length - 1);
if(first > -1 && last > -1)
number = last - first + 1;
}
return number;
}
// 找到数组中第一个k的下标。如果数组中不存在k,返回-1
- int GetFirstK(const int* data, int length, int k, int start, int end)
{
if(start > end)
return -1;
int middleIndex = (start + end) / 2;
int middleData = data[middleIndex];
if(middleData == k)
{
if((middleIndex > 0 && data[middleIndex - 1] != k)
|| middleIndex == 0)
return middleIndex;
else
end = middleIndex - 1;
}
else if(middleData > k)
end = middleIndex - 1;
else
start = middleIndex + 1;
return GetFirstK(data, length, k, start, end);
}
// 找到数组中最后一个k的下标。如果数组中不存在k,返回-1
- int GetLastK(const int* data, int length, int k, int start, int end)
{
if(start > end)
return -1;
int middleIndex = (start + end) / 2;
int middleData = data[middleIndex];
if(middleData == k)
{
if((middleIndex < length - 1 && data[middleIndex + 1] != k)
|| middleIndex == length - 1)
return middleIndex;
else
start = middleIndex + 1;
}
else if(middleData < k)
start = middleIndex + 1;
else
end = middleIndex - 1;
return GetLastK(data, length, k, start, end);
}
在排序数组中查找数字相关推荐
- LeetCode-剑指 Offer 53 - I. 在排序数组中查找数字 I
剑指 Offer 53 - I. 在排序数组中查找数字 I 思路一:二分单边 + 线性扫描 先用一次二分查找找到边界,再再边界里面寻找目标值 class Solution {public:int se ...
- 【LeetCode】剑指 Offer 53 - I. 在排序数组中查找数字 I
[LeetCode]剑指 Offer 53 - I. 在排序数组中查找数字 I 文章目录 [LeetCode]剑指 Offer 53 - I. 在排序数组中查找数字 I 一.二分法 总结 一.二分法 ...
- 剑指Offer - 面试题53 - I. 在排序数组中查找数字 I(二分查找的变形版本)
1. 题目 统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2示例 2: 输入: nums = [5,7,7,8, ...
- 数组-在排序数组中查找数字(统计出现的次数)
题意: 统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2: 输入: nums = [5,7,7,8,8 ...
- 剑指 Offer 53 - I. 在排序数组中查找数字 I(二分法)
统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2: 输入: nums = [5,7,7,8,8,10] ...
- [剑指offer]面试题第[53-1]题[JAVA][在排序数组中查找数字-1][二分法][暴力法]
[问题描述][中等] 统计一个数字在排序数组中出现的次数. 示例 1:输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2:输入: nums = [5,7, ...
- 剑指Offer53-Ⅰ—在排序数组中查找数字
剑指Offer53-Ⅰ 题意 统计一个数字在排序数组中出现的次数. 解法1-暴力循环 class Solution { public:int search(vector<int>& ...
- Leetcode 剑指 Offer 53 - I. 在排序数组中查找数字 I (每日一题 20210928)
统计一个数字在排序数组中出现的次数.示例 1:输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2:输入: nums = [5,7,7,8,8,10], t ...
- 【剑指offer】面试题53 - 1:在排序数组中查找数字 I(java)
统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2: 输入: nums = [5,7,7,8,8,10] ...
- 【算法】剑指 Offer 53 - I. 在排序数组中查找数字 I
1.概述 统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target =
最新文章
- python之4个小作业
- 王者荣耀10连胜,竟然也有人不相信,猎游大神带菜鸡玩家10连胜
- Hello Python程序演练
- Linux下使用g++编译C++程序——Compiling Cpp
- [补档]noip2019集训测试赛(十四)
- 如何利用计算机系统原理做文件保护,计算机系统设计原理(影印版).docx
- Illegal output or inout port connection (port 'out').
- vivox50pro鸿蒙系统,钱包卡包都承包 vivo X50 Pro+多功能NFC玩法多
- Android 高级控件ListView用法
- REFPROP+matlab拟合物性参数公式
- SpringMVC入门简单静态资源处理
- win10系统任务栏透明方法
- 使用IIS部署若依前后端分离项目
- 基于Proteus学习单片机系列(五)——定时器实现电子表
- mysql的索引缺点_Sqlite数据库中索引的使用、索引的优缺点
- 用函数统计各分数段人数c语言,如何使用Excel函数统计各分数段的人数(五种方法)...
- 适合团队工作的软件,大家来看看有没有喜欢的吧
- 分析google adsence
- dnn分类鸢尾花 pytorch_从实例掌握 pytorch 进行图像分类
- SD2.0大会上关于“大型网站架构技术”的讨论(笔记)
热门文章
- Opencv笔记(二十一)——傅里叶变换
- NO.109 禅道“红火”新年小礼,祝大家2014红红火火~~
- SQLite介绍及使用
- Java的世界如此美妙
- 如何在JPG或BMP图片上显示输入的订单数据内容,并在报表打印时显示出来,后台数据库是SQL SERVER 2000 ,先谢了.高分!...
- 禁用安全模式小方法!!~
- 怎么制作铁闸门_咖啡师养成记 | 教你做一杯合格的拿铁咖啡
- 1103 Integer Factorization (30 分)深度搜索30分大题要重写
- txtv28pw河南某中学_有一种寒冷叫不穿秋裤!河南一中学班主任让学生列队挨个检查秋裤...
- Train Problem I(STL)基本运用stack