剑指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个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务