首页 > 其他分享 >排序数组中查找元素的第一个和最后一个位置

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

时间:2022-08-27 17:49:38浏览次数:56  
标签:target nums int mid 查找 数组 目标值 排序

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

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

你必须设计并实现时间复杂度为 O(log n) 的算法解决此问题。

 

class Solution {
    public int[] searchRange(int[] nums, int target) {
        int n  =nums.length;
        int le =  binary(nums,target,true);
        int ri =  binary(nums,target,false)-1;
        if(le<=ri&&ri<n){
              return new int []{le,ri};
        }
        else{
            return new int[]{-1,-1};
        }
    }
    public int binary(int[]nums,int target,boolean flag){
        int l  = 0;
        int r = nums.length-1;
        int ans  =nums.length;
        while(l<=r){
            int mid  =(r+l)>>1;
            if((nums[mid]>=target&&flag)||(nums[mid]>target)){
                ans = mid;
                r  =mid-1;
            }
            else{
                l = mid+1;
            }
        }
        return ans;
    }
}

 

nums[mid]>target  找到第一个比target大的数字 找不到返回nums.length;
nums[mid]>=target&&flag找到第一个等于target的数字,如果不存在,返回的是第一个比target大的数字

标签:target,nums,int,mid,查找,数组,目标值,排序
From: https://www.cnblogs.com/tingtin/p/16630997.html

相关文章

  • 7.2 SQL Server数据排序
    SQLServerORDERBY目录SQLServerORDERBYSQLServerORDERBY子句简介ORDERBY示例A)按一列升序排序B)按一列降序排序C)按多列对结果集排序D)按多列和不同顺序对结果......
  • 二分查找(非递归)
    1.二分查找算法(非递归)介绍我们讲过了二分查找算法,是使用递归的方式;二分查找法只适用于从有序的数列中进行查找(比如数字和字母等),将数列排序后再进行查找二分查找法......
  • 字节数组流
    字节数组流ByteArrayInputStream和ByteArrayOutputStream都是用于需要流和数组转换的情况!字节数组输入流说白了,FIleInputStream是把文件当做数据源,而ByteArrayInputS......
  • 线性排序上
    目录线性排序算法介绍桶排序(Bucketsort)计数排序(Countingsort)基数排序(Radixsort)思考线性排序算法介绍线性排序算法包括桶排序、计数排序、基数排序。因为这些排序算......
  • JS-数组
    数组数据结构 数据的结构(逻辑结构存储结构算法)存储结构(数据存储的结构方式)线性结构数组(顺序表)队列栈堆链表非线性结构树图hash(散列表......
  • 列表数组操作
    Golang//切片去重funclistDupRemove(list[]int)[]int{ s:=make([]int,0) m:=make(map[int]bool) for_,k:=rangelist{ if_,ok:=m[k];!ok{ ......
  • 数组中两元素的最大乘积
    数组中最大两元素乘积一、题目描述给定一个数组nums,使用i或J表示数组中最大值元素和次大值元素,返回(nums[i]-1)*(nums[j]-1),即可;实例输入:nums=[2,1,3,5]输出:8输......
  • 优先队列-2386. 找出数组的第 K 大和
    问题描述给你一个整数数组nums和一个正整数k。你可以选择数组的任一子序列并且对其全部元素求和。数组的第k大和定义为:可以获得的第k个最大子序列和(子序......
  • 排序下
    目录归并排序快速排序归并排序与快速排序的区别思考归并排序1.算法原理:如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两......
  • php:定义“关联数组”的显示函数
    php:定义“关联数组”的显示函数    一、关联数组的显示函数代码部分 1<?php234/*函数定义区域*/56//定义“关联数......