剑指offer53(Java)-在排序数组中查找数字(简单)
题目:
统计一个数字在排序数组中出现的次数。
示例 1:
输入: nums = [5,7,7,8,8,10], target = 8
输出: 2
示例 2:
输入: nums = [5,7,7,8,8,10], target = 6
输出: 0
提示:
- 0 <= nums.length <= 105
- -109 <= nums[i] <= 109
- nums 是一个非递减数组
- -109 <= target <= 109
注意:本题与力扣 34 题相同(仅返回值不同)
来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
解题思路:
方法一:暴力求解(面试的时候不推荐)
1 class Solution {
2 public int search(int[] nums, int target) {
3 int res = 0;
4 for (int i = 0; i < nums.length; i++){
5 if (nums[i] == target){
6 res++;
7 }
8 }
9 return res;
10 }
11 }
方法二:两次二分
- 先找目标值第一次出现的位置 FirstTarget,如果第一次出现的位置为-1,代表数组中根本没有目标值,直接返回0即可;
- 如果 FirstTarget != -1,则查找目标值最后一次出现的位置LastTarget;
- 最后 LastTarget - FirstTarget + 1 即为出现的次数
注意:我一开始两个二分查找写的代码一样的,但是不可以,要注意区分
参考:三叶姐的题解 和 liweiwei1419的题解
第一次出现的位置里:nums[mid] >= target
最后一次出现的位置里:nums[mid] <= target
1 class Solution {
2 public int search(int[] nums, int target) {
3 int len = nums.length;
4 if (len == 0) return 0;
5 int FirstTarget = FindFirstTarget(nums, target);
6 if (FirstTarget == -1) return 0;
7 int LastTarget = FindLastTarget(nums, target);
8 return LastTarget - FirstTarget + 1;
9 }
10 public int FindFirstTarget(int[] nums, int target){
11 int left = 0, right = nums.length - 1;
12 while (left < right){
13 int mid = left + (right - left) / 2;
14 if (nums[mid] >= target){
15 right = mid;
16 }else {
17 left = mid + 1;
18 }
19 }
20 if (nums[left] == target) return left;
21 return -1;
22 }
23 public int FindLastTarget(int[] nums, int target){
24 int left = 0, right = nums.length - 1;
25 while (left < right){
26 int mid = left + (right - left + 1) / 2;
27 if (nums[mid] > target){
28 //搜索区间为:[left , mid - 1]
29 right = mid - 1;
30 }else {
31 //mid <= target,找的是最后一个目标值
32 //搜索区间为:[mid , right]
33 left = mid;
34 }
35 }
36 return left;
37 }
38 }
与 力扣34(java)-在排序数组中查找元素的第一个和最后一个位置(中等)差不多,只是返回的形式不一样。
剑指offer53(Java)-在排序数组中查找数字(简单)的更多相关文章
- 【Java实现】剑指offer53.1——在排序数组中查找数字(LeetCode34:在排序数组中查找元素的起始位置)
序数组中查找元素的起始位置):思路分享 <剑指offer>题目和LeetCode主站本质是一样的,想要找到target数目,也需要找到左右边界 题目解析: 在一个排序数组中,找到targe ...
- 剑指offer——56在排序数组中查找数字
题目描述 统计一个数字在排序数组中出现的次数. 题解: 使用二分法找到数k然后向前找到第一个k,向后找到最后一个k,即可知道有几个k了 但一旦n个数都是k时,这个方法跟从头遍历没区别,都是O(N) ...
- 剑指offer-面试题53_1-在排序数组中查找数字-二分查找
/* 题目: 统计一个数字在排序数组中出现的次数. */ /* 思路: 1.从前往后遍历,时间复杂度O(n). 2.二分查找到目标数字target,向前向后遍历,时间复杂度O(n). 3.利用二分法, ...
- 剑指 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: 输入: nums = [5,7,7,8,8,10], target = 8 输出 ...
- 力扣 - 剑指 Offer 53 - I. 在排序数组中查找数字 I
题目 剑指 Offer 53 - I. 在排序数组中查找数字 I 思路1 一般来说,首先想到的是使用一个变量,从头开始遍历整个数组,记录target数组出现的次数,但是这样的时间复杂度是O(n),还是 ...
- 每日一题 - 剑指 Offer 53 - I. 在排序数组中查找数字 I
题目信息 时间: 2019-07-04 题目链接:Leetcode tag:二分查找 哈希表 难易程度:简单 题目描述: 统计一个数字在排序数组中出现的次数. 示例1: 输入: nums = [5,7 ...
- 剑指Offer01之二维数组中查找目标数
剑指Offer之二维数组中查找目标数 题目描述 在一个二维数组中(每个一维数组的长度相等),每一行都是从左到右递增的顺序排序,每一列都是从上到下递增的顺序排序,输入这样一个二维数组和一个整数,判断 ...
- [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-在排序数组中查找数字(二分查找)
题目一 数字在排序数组中出现的个数 题目描述 统计一个数字在排序数组中出现的次数. 解决思路 写两个二分查找分别找第一个和最后一个该数字,然后可直接出计算有几个该数字.时间复杂度为O(logn). 这 ...
随机推荐
- idea vue 格式化 并保存文件 宏 快捷键 ctrl+s
idea 格式化是 reformat Code 存盘是 ctrl+s 所以创建一个宏,先点格式化,再点存盘,然后定义个ctrl+s的快捷键覆盖之前的保存就ok了. 资料: IDEA 配置宏定义 并为宏 ...
- idea branch 分支比较 | git 查看分支命令 `git branch -vv`
git 查看分支命令 git branch -vv
- 1.Arduino ESP32配置环境
ESP32开发板管理器地址 https://dl.espressif.com/dl/package_esp32_index.json // 无效时可以使用下面这个 https://raw.github ...
- Windows 2012 R2 修复CredSSP 远程执行代码漏洞 CVE-2018-0886
本文基于window 2012 R2版本,各位参考下载自己版本对应的补丁包即可 说明 公司的安全性检查,需要修复服务器上的漏洞,其中有个漏洞是CVE-2018-0886,结果网上的资料和一番折腾,终于 ...
- C++B树的实现
B树的实现 今天我们就来实现以下B树,B树有什么特点那?我们来列举一下 每个非叶子节点中存放若干关键字数据,并且有若干指向儿子节点的指针.指针数目=关键字数目+1 根节点有最少1个,最多m-1个关键字 ...
- day07-JavaScript04
JavaScript04 11.DOM02 11.3HTML-DOM文档说明 11.3.1基本介绍 在HTML DOM(文档对象模型)中,每个部分都是节点: 1)文档本身是文档节点 2)所有HTML元 ...
- 3DCAT投屏功能升级,助力企业营销与培训
3DCAT实时渲染云推出以来,深受广大客户的喜爱,3DCAT也一直根据客户的反馈优化我们的产品. 但是这段时间来,不同行业的客户都反馈着同一个问题. 汽车销售顾问:"什么时候支持投屏功能呢, ...
- dotNet符号文件(pdb),符号包(snupkg)和SourceLink
前言 本文的主题是 Visual Studio 调试 NuGet 包,以及符号包的概念,如何去发布一个 NuGet 包,让我们的 NuGet 包支持 SouceLink,这些都是我们开发中比较容易忽视 ...
- read IEEE Standard for verilog(1)
IEEE Standard for Verilog Hardware Description Language 英语说明阅读,首先看导读.目录.摘要等内容. 摘要: 1 Abstract: The V ...
- KingbaseES V8R6运维案例之---数据库resetwal后启动失败
KingbaseES V8R6运维案例之---数据库resetwal后启动失败 案例说明: KingbaseES V8R6集群触发failover切换后,原主库自动recovery失败,现在需要将原主 ...