《剑指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:二维数组中的查找
题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...
随机推荐
- IPv6 DDNS 阿里云动态解析程序推荐: AliyunDdnsCSharp
IPV6 DDNS 设置 概述 中国移动宽带提供了公网IPv6地址,为了物尽其用,于是折腾了域名到IPv6 的解析服务. 平台使用的阿里云解析DNS,平台提供了接口可以方便的添加与修改解析地址. 本打 ...
- 筛选Table.SelectRows-日期与时间(Power Query 之 M 语言)
数据源: 包含日期与时间的任意数据 目标: 对日期与时间进行筛选 M公式: = Table.SelectRows( 表,筛选条件) 筛选条件: 等于:each [日期列] = #date(年,月,日) ...
- CF263B Squares 题解
Content 有 \(n\) 个边长为 \(a_i\) 的正方形,第 \(i\) 个正方形的四个顶点分别是 \((0,0),(0,a_i),(a_i,0),(a_i,a_i)\),我们定义一个点属于 ...
- Dockerfile使用OracleJDK创建自定义tomcat8镜像
我们默认下载的tomcat镜像是用的openjdk ,但是我们有些项目必须使用oraclejdk 那就不能使用官方的tomcat镜像,只能重新自定义一个镜像 Dockerfile文件 FROM cen ...
- js中的jQuery Validate增加手机号码验证
$.validator.addMethod("isPhone", function(value,element) { var length = value.length; var ...
- Qt之QListView和QStandardItemModel用法
note 个人理解, QListView 用于 显示数据,而数据的逻辑维护则由 QStandardItemModel 完成. QStandardItemModel 创建 if (nullptr == ...
- VS2017激活key
密钥 KBJFW-NXHK6-W4WJM-CRMQB-G3CDH
- mac OSX使用spdlog1.7
!!版权声明:本文为博主原创文章,版权归原文作者和博客园共有,谢绝任何形式的 转载!! 作者:mohist 注意️ 请选择对c++11支持较为完善的编译器,因为spdlog一直更新. 本机演示环境 ...
- CMake判断操作系统和编译器
判断操作系统 IF (CMAKE_SYSTEM_NAME MATCHES "Linux") ELSEIF (CMAKE_SYSTEM_NAME MATCHES "Wind ...
- 【LeetCode】1419. 数青蛙 Minimum Number of Frogs Croaking (Python)
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 字典 日期 题目地址:https://leetcode ...