代码编织梦想

每日一题:剑指 Offer 53 - I. 在排序数组中查找数字 I

1、题目

统计一个数字在排序数组中出现的次数。

示例 1:

输入: nums = [5,7,7,8,8,10], target = 8
输出: 2

示例 2:

输入: nums = [5,7,7,8,8,10], target = 6
输出: 0

限制:

0 <= 数组长度 <= 50000
2、解法

题目比较清晰,最简单暴力的方法是从左到右进行进行判断统计,时间复杂度为O(n),但是我们确忽略了数组是排序好的特点(这里为升序)。

对于排序好的数组,查找相关的操作很容易想到二分法,所以我们用二分法来实现,这样时间复杂度降为O(nlogn),最坏情况下为O(n),即数组所有元素都一样。

class Solution:
    def search(self, nums: List[int], target: int) -> int:
        length = len(nums)
        if length == 0:
            return 0

        result = 0
        left, right = 0, length-1
        while (left<=right):
            mid = int((left+right)/2)
            if nums[mid] < target:
                left = mid + 1
            elif nums[mid] > target:
                right = mid - 1
            elif nums[mid]==target: # 说明找到了匹配的值,后续的匹配只需要在这个位置前后进行查找就可以了
                result += 1
                
                tmpMid = mid-1
                while tmpMid>=left:
                    if nums[tmpMid]==target:
                        result += 1
                        tmpMid -= 1
                    else:
                        break
                
                tmpMid = mid + 1
                while tmpMid<=right:
                    if nums[tmpMid]==target:
                        result += 1
                        tmpMid += 1
                    else:
                        break
                return result  # 注意这里返回结果,没必要继续查找了
        return result
执行用时:40 ms, 在所有 Python3 提交中击败了72.93%的用户
内存消耗:15.6 MB, 在所有 Python3 提交中击败了20.20%的用户
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_27225851/article/details/114340790

【剑指offer】面试题53 - 1:在排序数组中查找数字 I(java)-爱代码爱编程

统计一个数字在排序数组中出现的次数。   示例 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 Soluti

剑指offer 面试题53 - I. 在排序数组中查找数字 I [简单]-爱代码爱编程

我的解题: 1.先用二分查找找到target,在由该节点向左右遍历看有多少相等的 class Solution { public: int search(vector<int>& nums, int target) { int i=0; int j=nums.size()-1;

剑指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 排序里面查找数字,首先就想到是二分,查出现次数,显然是找左边界

《剑指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 暴力 简单的循环遍历数组 cla

LeetCode(剑指offer-Array)-面试题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 链接:https://leetcode-c

【剑指offer】【数组】面试题53-I - 在排序数组中查找数字I-爱代码爱编程

一 目录 不折腾的前端,和咸鱼有什么区别 目录一 目录二 题目三 解题思路四 统计分析五 解题套路二 题目 统计一个数字在排序数组中出现的次数。   示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2: 输入: nums = [5,7,7,8,8,10], target = 

剑指 Offer 53-I. 在排序数组中查找数字 I(Java版本)-爱代码爱编程

剑指 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 <= 数组长度 <= 50

【Java语言】力扣系列----剑指 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

剑指 Offer 53 - I. 在排序数组中查找数字 I - leetcode 剑指offer系列-爱代码爱编程

题目难度: 简单 原题链接 今天继续更新剑指 offer 系列, 老样子晚上 6 点 45 分准时更新公众号 每日精选算法题, 大家记得关注哦~ 另外在公众号里回复 offer 就能看到剑指 offer 系列当前连载的所有文章了 题目描述 统计一个数字在排序数组中出现的次数。 0 <= 数组长度 <= 5

LeetCode:剑指 Offer 53 - I. 在排序数组中查找数字 I(C语言)-爱代码爱编程

题目描述: 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2: 输入: nums = [5,7,7,8,8,10], target = 6 输出: 0 限制: 0 <= 数组长度 <= 50000 作者:Krahets 链接:http

剑指 Offer 53 - I. 在排序数组中查找数字-爱代码爱编程

故心故心故心故心小故冲啊 文章目录 题目:统计一个数字在排序数组中出现的次数。解法一:暴力破解过滤filter 题目:统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2: 输入: nums = [5,7,7,8,8,10], target =

剑指 Offer 53 - I. 在排序数组中查找数字 I-爱代码爱编程

剑指 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   限制:

力扣 [简单] [剑指 Offer 53 - I. 在排序数组中查找数字 I](待补充二分法)-爱代码爱编程

剑指 Offer 53 - I. 在排序数组中查找数字 I 难度简单153收藏分享切换为英文接收动态反馈 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2: 输入: nums = [5,7,7,8,8,10], target = 6 输出: 0

剑指 Offer 53 - I. 在排序数组中查找数字 I 【 c++/java详细题解 】-爱代码爱编程

目录 1、题目2、思路3、c++代码4、java代码 1、题目 统计一个数字在排序数组中出现的次数。 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 示例 2: 输入: nums = [5,7,7,8,8,10], target = 6 输出: 0 提示: 0 <= n