剑指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), 未使用额外空间。

全部评论

相关推荐

10-14 23:01
已编辑
中国地质大学(武汉) Java
CUG芝士圈:虽然是网上的项目,但最好还是包装一下,然后现在大部分公司都在忙校招,十月底、十一月初会好找一些。最后,boss才沟通100家,别焦虑,我去年暑假找第一段实习的时候沟通了500➕才有面试,校友加油
点赞 评论 收藏
分享
11-09 01:22
已编辑
东南大学 Java
高级特工穿山甲:羡慕,我秋招有家企业在茶馆组织线下面试,约我过去“喝茶详谈”😢结果我去了发现原来是人家喝茶我看着
点赞 评论 收藏
分享
11-28 17:48
中山大学 C++
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务