• 34-排序数组中查找元素的第一个和最后一个下标


     看到时间复杂度要求:O(logn),就知道是折半查找,很简单,先折半查找target的下标,之后向左右找nums[left],nums[right]等于target的下标,返回就行。

    class Solution {
        public int[] searchRange(int[] nums, int target) {
            int mid=findHalf(nums,target);//找target的下标(只是其中一个下标)
            if(mid==-1)return new int[]{-1,-1};
            int left=mid;//左边界下标
            int right=mid;//右边界下标
            while(left>0)
            {
                if(nums[left-1]==target)
                {
                    left--;
                }
                else
                {
                    break;
                }
            }
            while(right<nums.length-1)//因为要涉及到下标right+1,所以,right只能到nums.length-1
            {
                if(nums[right+1]==target)
                {
                    right++;
                }
                else
                {
                    break;
                }
            }
            return new int[]{left,right};
    
        }
        public int findHalf(int[] nums,int target)
        {
            int left=0;
            int right=nums.length-1;
            
            while(left<=right)
            {
                int mid=(left+right)/2;
                if(nums[mid]==target) return mid;
                else if(nums[mid]<target)
                {
                    left=mid+1;
                }
                else{
                    right=mid-1;
                }
            }
            return -1;
        }
    }
    

      

  • 相关阅读:
    北京联通光猫WO-36(HG220GS-U)改为桥接模式
    使用DataGrip导入数据
    Spring知识点
    mybatis-generator
    项目中mybatis连接mysql常见问题
    Spring AOP
    Volatile
    Redis知识点
    Spring IOC
    Observer模式
  • 原文地址:https://www.cnblogs.com/lzh1043060917/p/12791978.html
Copyright © 2020-2023  润新知