剑指Offer刷题记录,第四题。

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


方法一:二分+递归

思路:其实从题干描述就知道肯定会使用二分查找,最大的问题在于怎么根据题目要求调整二分查找,可以看出如下关系式(二分最难莫过于边界条件的控制):

class Solution {
   
    int count = 0;
    public int search(int[] nums, int target) {
   
        // 特例
        if (nums == null || nums.length == 0 || target < nums[0] || target > nums[nums.length - 1]) {
   
            return 0;
        }
        binarySearch(nums, target, 0, nums.length - 1);
        return count;
    }
    public void binarySearch(int[] nums, int target, int left, int right) {
   
        if (left <= right) {
   
            int mid = left + (right-left) / 2;
            if (nums[mid] > target) {
   
                binarySearch(nums, target, left, mid - 1);
            }else if (nums[mid] < target) {
   
                binarySearch(nums, target, mid + 1, right);
            }else {
   
                count += 1;
                binarySearch(nums, target, left, mid - 1);
                binarySearch(nums, target, mid + 1, right);
            }
        }
    }
}

时间复杂度:O(LogN), N为数组长度,二分查找时间复杂度为O(LogN),但当数组中全是target值时,整体复杂度退变成O(N)。
空间复杂度:O(1), 未使用额外空间。

全部评论

相关推荐

叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
zYvv:双一流加大加粗再标红,然后广投。主要是获奖荣誉不够,建议开始不用追求大厂,去别的厂子刷下实习。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务