leetcode

    xiaoxiao2021-03-25  103

    题意:

    给一个升序数组,和一个目标数。查找目标数,没找到返回[-1, -1],找到返回目标数的起始坐标和中点坐标

    分析:

    二分查找。

    3333388888444444

    找8,mid一下就落到8上,所以这个时候,如果low,high不等于teget,那么就顺序(逆序)移动。

    可能是8888888888  或者 3888888884,当然,如果这时候low,high也都等于target了,直接返回

    如果mid没有落在target上,还是按照一般二分查找就可以,稍微想一下就知道是符合要求的。

    代码很容易了:

    public class Solution { public int[] searchRange(int[] nums, int target) { int low = 0; int high = nums.length-1; while(low <= high){ int mid = low + (high-low)/2; if(nums[mid] == target){ if(nums[low] == target && nums[high] == target){ return new int[]{low, high}; } if(nums[low] != target){ low++; } if(nums[high] != target){ high--; } }else if(nums[mid] < target){ low = mid + 1; }else{ high = mid - 1; } } return new int[]{-1, -1}; } }

    转载请注明原文地址: https://ju.6miu.com/read-18157.html

    最新回复(0)