《剑指offer》面试题53 - I. 在排序数组中查找数字 I
问题描述
统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
限制:
0 <= 数组长度 <= 50000
代码
class Solution {
public:
int search(vector<int>& nums, int target) {
int n = nums.size(),left = 0,right = n-1,ans= 0,middle;
if(n == 0)return 0;
//先找左边界,再向右寻找
while(left < right)
{
middle = left + (right - left)/2;
if(nums[middle] < target)
left = middle+1;
else
right = middle;
}
while(left < n && nums[left]==target)++left,++ans;
return ans;
}
};
结果
执行用时 :12 ms, 在所有 C++ 提交中击败了71.11%的用户
内存消耗 :13.1 MB, 在所有 C++ 提交中击败了100.00%的用户
代码
class Solution {
public:
int search(vector<int>& nums, int target) {
int n = nums.size(),left = 0,right = n-1,middle,tmp;
if(n == 0)return 0;
//先找左边界
while(left < right)
{
middle = left + (right - left)/2;
if(nums[middle] < target)
left = middle+1;
else
right = middle;
}
//再找右边界left可以不用动了
right = n-1;
if(nums[left] != target)return 0;//如果没有找到直接返回
tmp = left;
while(left < right)
{
middle = left + (right-left+1)/2;//注意找右中值
if(nums[middle] > target)
right = middle - 1;
else
left = middle;
}
return right - tmp + 1;
}
};
结果
执行用时 :16 ms, 在所有 C++ 提交中击败了47.55%的用户
内存消耗 :13.3 MB, 在所有 C++ 提交中击败了100.00%的用户
代码
class Solution {
public:
int search(vector<int>& nums, int target) {
int ans=0;
for(int i:nums)
{
if(i == target){
++ans;
}
else if(i > target)
break;
}
return ans;
}
};
结果
执行用时 :20 ms, 在所有 C++ 提交中击败了31.61%的用户
内存消耗 :13.3 MB, 在所有 C++ 提交中击败了100.00%的用户
代码
class Solution {
public:
int search(vector<int>& nums, int target) {
return upper_bound(nums.begin(), nums.end(), target) - lower_bound(nums.begin(), nums.end(), target);
}
};
结果
执行用时 :16 ms, 在所有 C++ 提交中击败了47.55%的用户
内存消耗 :13.2 MB, 在所有 C++ 提交中击败了100.00%的用户
《剑指offer》面试题53 - I. 在排序数组中查找数字 I的更多相关文章
- [LeetCode]面试题53 - I. 在排序数组中查找数字 I(二分);面试题53 - II. 0~n-1中缺失的数字(二分)
##面试题53 - I. 在排序数组中查找数字 I ###题目 统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 ...
- [简单-剑指 Offer 53 - I. 在排序数组中查找数字 I]
[简单-剑指 Offer 53 - I. 在排序数组中查找数字 I] 统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出 ...
- 剑指 Offer 53 - I. 在排序数组中查找数字 I + 二分法
剑指 Offer 53 - I. 在排序数组中查找数字 I Offer_53_1 题目描述 方法一:使用HashMap package com.walegarrett.offer; /** * @Au ...
- 力扣 - 剑指 Offer 53 - I. 在排序数组中查找数字 I
题目 剑指 Offer 53 - I. 在排序数组中查找数字 I 思路1 一般来说,首先想到的是使用一个变量,从头开始遍历整个数组,记录target数组出现的次数,但是这样的时间复杂度是O(n),还是 ...
- 剑指offer——面试题4:二维数组中的查找
// 面试题4:二维数组中的查找 // 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按 // 照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 // 整数 ...
- 剑指Offer面试题:2.二维数组中的查找
一.题目:二维数组中的查找 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数. ...
- 每日一题 - 剑指 Offer 53 - I. 在排序数组中查找数字 I
题目信息 时间: 2019-07-04 题目链接:Leetcode tag:二分查找 哈希表 难易程度:简单 题目描述: 统计一个数字在排序数组中出现的次数. 示例1: 输入: nums = [5,7 ...
- 剑指 Offer 53 - I. 在排序数组中查找数字 I
题目描述 统计一个数字在排序数组中出现的次数. 示例1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例2: 输入: nums = [5,7,7,8,8, ...
- 剑指offer 面试题4:二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
随机推荐
- ANTLR 语法设计
下面学习如何编写语法. 如何定义语法规则 一种语言模式就是一种递归的语法结构. 我们需要从一系列有代表性的输入文件中归纳出一门语言的结构.在完成这样的归纳工作后,我们就可以正式使用ANTLR语法来表达 ...
- java -jar 配置参数写法说明
java -Dxxx=test -jar xxx.jar (放在-jar之前) 取值:System.getProperty("xxx") spring的@value(" ...
- jquery gantt 的使用
1.引入css与js文件 <link rel="stylesheet" href="css/style.css" /> <script src ...
- nim_duilib之virtualListbox用法(22)
概述 本文将介绍virtualListbox的用法. 更多请参考源码. 一个样式 样式丑了点,勿喷. 重写函数 使用virtualListbox, 需要一个派生类(继承自基类VirtualListIn ...
- nim_duilib(16)之xml学习实战(GTAV加载窗口实现)
本文的目标 使用配置xml实现下面的结果 布局 整体采用水平布局,左边显示文字区域设置为垂直布局. lets go stage 1 创建一个空白窗体,并设置为半透明:同时,使得整个窗口可以移动,则 将 ...
- 【九度OJ】题目1434:今年暑假不AC 解题报告
[九度OJ]题目1434:今年暑假不AC 解题报告 标签(空格分隔): 九度OJ http://ac.jobdu.com/problem.php?pid=1434 题目描述: "今年暑假不A ...
- 【九度OJ】题目1080:进制转换 解题报告
[九度OJ]题目1080:进制转换 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1080 题目描述: 将M进制的数X转换为 ...
- 【LeetCode】76. Minimum Window Substring 最小覆盖子串(Python & C++)
作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 滑动窗口 日期 题目地址: https://leet ...
- 【LeetCode】11. Container With Most Water 盛最多水的容器
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人公众号:负雪明烛 本文关键词:盛水,容器,题解,leetcode, 力扣,python ...
- RabbitMQ 七种队列模式
(1)简单模式(Hello World) 做最简单的事情,一个生产者对应一个消费者,RabbitMQ相当于一个消息代理,负责将A的消息转发给B 应用场景: 将发送的电子邮件放到消息队列,然后邮件服务在 ...