• 34. 在排序数组中查找元素的第一个和最后一个位置


     

      给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。

     

      你的算法时间复杂度必须是 O(log n) 级别。

     

      如果数组中不存在目标值,返回 [-1, -1]。

     

      示例 1:

     

        输入: nums = [5,7,7,8,8,10], target = 8
        输出: [3,4]
      示例 2:

     

        输入: nums = [5,7,7,8,8,10], target = 6
        输出: [-1,-1]

     题解:

    package array;
    
    public class L34 {
        public static int[] searchRange(int[] nums, int target) {
            int index = searchIndex(nums,target,0,nums.length-1);
            int lowIndex = index,highIndex = index;
            if(lowIndex == -1 && highIndex == -1){
                return new int[]{lowIndex,highIndex};
            }
            while(lowIndex >= 0 && nums[lowIndex] == target){
                lowIndex --;
            }
            lowIndex++;
            while(highIndex<nums.length && nums[highIndex] == target){
                highIndex ++;
            }
            highIndex--;
            return new int[]{lowIndex,highIndex};
        }
        public static int searchIndex(int[] nums, int target,int start,int end){
            while(start <= end){
                if(nums[(start+end)/2] == target){
                    return (start+end)/2;
                }else if(nums[(start+end)/2] > target){
                    end = (start+end)/2-1;
                    return searchIndex(nums, target,start,end);
                }else {
                    start =  (start+end)/2+1;
                    return searchIndex(nums, target,start,end);
                }
            }
            return -1;
        }
    
        public static void main(String[] args) {
    
            int[] nums = {1};
            int[] returnNums = searchRange(nums,1);
            System.out.println(returnNums[0]+"   "
                    +returnNums[1]);
        }
    }

     

  • 相关阅读:
    堆(优先队列)模板
    线段树(递归)模板
    快速幂(含二阶方阵类)模板
    ACM/CF赛制getstart模板
    [Andrew Stankevich's Contest#21] Lempel-Ziv Compression
    [NOIP2001]Car的旅行路线
    [NOIP2007] 矩阵取数游戏
    [NOIP2010] 关押罪犯
    [NOIP1999] 拦截导弹
    设计模式之第1章-工厂方法模式(Java实现)
  • 原文地址:https://www.cnblogs.com/mayang2465/p/11736380.html
Copyright © 2020-2023  润新知