代码编织梦想

剑指 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

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

思路

由于有序数组中查找——二分查找

找到后左右扩展,统计相同并返回

题解


/**
 * Solution
 *
 * @author yuzuki
 * @date 2021/4/6 21:20
 * @since 1.0.0
 */
public class Solution {
    public int search(int[] nums, int target) {
        if (nums.length == 1 && nums[0] == target){
            return 1;
        }
        int left = 0,right = nums.length-1;
        int res = 0;
        // 要<= 否则出现调整后正好相等的情况也许做一次判定
        while (left<=right){
            int mid = (left+right)/2;
            if (target<nums[mid]){
                right = mid-1;
            }else if (target>nums[mid]){
                left = mid+1;
            }else {
                res++;
                int now0 = mid-1;
                int now1 = mid+1;
                // 相等,找到 左右扩展 必须做边界限定
                while (now0>=0&&nums[now0] == target){
                    res++;
                    now0--;
                }
                // 相等,找到 左右扩展
                while (now1<nums.length&&nums[now1] == target){
                    res++;
                    now1++;
                }
                break;
            }
        }
        return res;
    }

    public static void main(String[] args) {
//        int[] a = {5,7,7,8,8,10};
//        System.out.println("new Solution().search(a,8) = " + new Solution().search(a, 8));
//        int[] a = {1,4};
//        System.out.println("new Solution().search(a,8) = " + new Solution().search(a, 4));
        int[] a = {1,1,2};
        System.out.println("new Solution().search(a,8) = " + new Solution().search(a, 1));
    }
}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/wangzibai/article/details/115471993

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

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(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. 在排序数组中查找数字 I-爱代码爱编程

每日一题:剑指 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 <

剑指 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

LeetCode - 1705 - 吃苹果的最大数目 - Java - 细节~-爱代码爱编程

文章目录 题目题目解析解题方法 : 贪心思想 + 优先队列来跟着我一步步看,怎么实现这个代码第一步: 创建 三个变量 和 new 一个 PriorityQueue(优先队列),并制定该队列,每次取出 "苹果 / 数据" 时,永远是快要坏掉的 "苹果 / 数据"。第二步开始遍历 apples 和 days 数组,确认每天产出苹果数量 和 该天产出苹果

LeetCode 15三数之和(C语言 双指针法 realloc规划内存)-爱代码爱编程

题目: 给你一个包含 n 个整数的数组 nums,判断 nums 中是否存在三个元素 a,b,c ,使得 a + b + c = 0 ?请你找出所有和为 0 且不重复的三元组。 注意:答案中不可以包含重复的三元组。 示例1: 输入:nums = [-1,0,1,2,-1,-4] 输出:[[-1,-1,2],[-1,0,1]] 示

2021-12-24【编程谜题】【4个数之和】-爱代码爱编程

文章目录 4个数之和样例1:样例2:提示:题解双指针DFS+剪枝 4个数之和 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target 。请你找出并返回满足下述全部条件且不重复的四元组 [nums[a], nums[b], nums[c], nums[d]] (若两个四元组元素一一对应,则认为两个四元组重复): 0 <

75 --82 回溯||深度优先算法-爱代码爱编程

 75  含有 k 个元素的组合 给定两个整数 n 和 k,返回 1 ... n 中所有可能的 k 个数的组合。 力扣https://leetcode-cn.com/problems/uUsW3B/ //要查询n个数字中k个数的组合,先想到深度优先探索 //首先明确跳出条件,k==0的时候说明排列完毕,当数组长小于k的时候可以不必排列 //start

二叉树的中序遍历-爱代码爱编程

给定一个二叉树的根节点 root ,返回它的 中序 遍历。 示例 1: 输入:root = [1,null,2,3] 输出:[1,3,2] 示例 2: 输入:root = [] 输出:[] 示例 3: 输入:root = [1] 输出:[1] 示例 4: 输入:root = [1,2] 输出:[2,1

一道算法题-跳跃游戏 II-爱代码爱编程

跳跃游戏 II 给你一个非负整数数组 nums ,你最初位于数组的第一个位置。 数组中的每个元素代表你在该位置可以跳跃的最大长度。 你的目标是使用最少的跳跃次数到达数组的最后一个位置。 假设你总是可以到达数组的最后一个位置。 示例 1: 输入: nums = [2,3,1,1,4] 输出: 2 解释: 跳到最后一个位置的最小跳跃数是 2。从下标

Leetcode-D19-动态规划二刷-509. 斐波那契数&1137. 第 N 个泰波那契数&746. 使用最小花费爬楼梯-爱代码爱编程

509. 斐波那契数 1、第一想法是用一个dp数组,后来想可以用滑动的思想 2、第一次提交的时候忘记讨论n1和n2的情况了。 3、 class Solution: def fib(self, n: int) -> int: if n==0: return 0 if n==1: