栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

剑指 Offer 53 - I. 在排序数组中查找数字 I

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

剑指 Offer 53 - I. 在排序数组中查找数字 I

题目链接:

力扣https://leetcode-cn.com/problems/zai-pai-xu-shu-zu-zhong-cha-zhao-shu-zi-lcof/

【方法一】直接查找==target的num,统计次数

class Solution {

    int[] nums;
    int ans;
    int target;

    public void binary(int left, int right) {
        if(left <= right){
            int mid = (left + right) / 2;
            if(nums[mid] < target){
                binary(mid + 1, right);
            }else if(nums[mid] > target){
                binary(left, mid - 1);
            }else{
                ans ++;
                binary(mid + 1, right);
                binary(left, mid - 1);
            }
        }
    }

    public int search(int[] nums, int target) {
        this.nums = nums;
        this.target = target;
        binary(0, nums.length - 1);
        return ans;
    }
}

【方法二】查找大于target的最小值下标和小于target的最大值下标,二者相减。这样就需要实现c++里的lower_bound和upper_bound。

class Solution {

    int[] nums;
    int target;
    
    public int lower_bound(int left, int right){
        int mid;
        while(left <= right){
            mid = (left + right) / 2;
            if(nums[mid] >= target) right = mid - 1;
            else left = mid + 1;
        }
        return right;
    }

    public int upper_bound(int left, int right){
        int mid;
        while(left <= right){
            mid = (left + right) / 2;
            if(nums[mid] <= target) left = mid + 1;
            else right = mid - 1;
        }
        return left;
    }

    public int search(int[] nums, int target) {
        this.nums = nums;
        this.target = target;
        return upper_bound(0, nums.length - 1) - lower_bound(0, nums.length - 1) - 1;
    }
}

lower_bound实现的小细节就是当target<=nums[mid]的时候继续向左找,right = mid -1,最后返回right

 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/847169.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号