剑指 Offer 第53-1题:在排序数组中查找数字 I

2022-08-07  本文已影响0人  放开那个BUG

1、前言

题目描述

2、思路

因为是有序数组,所以可以使用二分查找,找到相关数之后,然后往两边扩,这是最朴素的思路。

3、代码

class Solution {
    public int search(int[] nums, int target) {
        if(nums == null || nums.length == 0){
            return 0;
        }

        int left = 0, right = nums.length - 1;
        while(left <= right){
            int mid = (right + left) / 2;
            if(nums[mid] == target){
                int size = 1, tl = mid - 1, tr = mid + 1;
                while((tl >= 0 && nums[tl] == nums[mid]) || (tr < nums.length && nums[tr] == nums[mid])){
                    if(tl >= 0 && nums[tl] == nums[mid]){
                        tl--;
                        size++;
                    }
                    if(tr < nums.length && nums[tr] == nums[mid]){
                        tr++;
                        size++;
                    }
                }
                return size;
            }else if(nums[mid] > target){
                right = mid - 1;
            }else{
                left = mid + 1;
            }
        }

        return 0;
    }
}
上一篇下一篇

猜你喜欢

热点阅读