LeetCode第三十四题-寻找数组中对应目标值的首尾索引

Find First and Last Position of Element in Sorted Array

问题简介:给定按升序排序的整数数组,找到给定目标值的起始位置和结束位置.

注:

1.算法的运行时复杂度必须为O(log n)

2.如果在数组中找不到目标,则返回[-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]

解法一:

可以从头遍历,第一次找到目标值的即第一个索引,再倒序遍历,寻找目标值

解法二:

我们也可以用改进的二进制来做,定义一个方法来分别求数组中第一个和最后一个与target相同值的索引,其中left是状态值,当left=true时,代表这个方法时寻找第一个索引值,false即最后一个索引值

复杂度分析:

时间复杂度:o(log10(n))

空间复杂度:o(1)

小白刷题之路,请多指教— — 要么大器晚成,要么石沉大海

原文地址:https://www.cnblogs.com/lalalaczq/p/10837699.html

时间: 2024-11-01 16:34:06

LeetCode第三十四题-寻找数组中对应目标值的首尾索引的相关文章

LeetCode第三十五题-寻找数组中对应目标值的首尾索引

Search Insert Position 问题简介:寻找数组中元素与target的关系 注: 1.target小于数组所有元素时返回0 2.target大于数组所有元素时返回数组长度 3.target不包含于数组元素中,但取值区间在其中,返回对应的索引 举例: 1: 输入: [1,3,5,6], 5 输出: 2 2: 输入: [1,3,5,6], 2 输出: 1 3: 输入: [1,3,5,6], 7 输出: 4 4: 输入: [1,3,5,6], 0 输出: 0 解法一:比较简单的解法就是

[经典算法题]寻找数组中第K大的数的方法总结

[经典算法题]寻找数组中第K大的数的方法总结 责任编辑:admin 日期:2012-11-26 字体:[大 中 小] 打印复制链接我要评论 今天看算法分析是,看到一个这样的问题,就是在一堆数据中查找到第k个大的值. 名称是:设计一组N个数,确定其中第k个最大值,这是一个选择问题,当然,解决这个问题的方法很多,本人在网上搜索了一番,查找到以下的方式,决定很好,推荐给大家. 所谓"第(前)k大数问题"指的是在长度为n(n>=k)的乱序数组中S找出从大到小顺序的第(前)k个数的问题.

每日一题 为了工作 2020 0405 第三十四题

/** * 问题: 向有序的环形单链表中插入新节点 * 一个环形单链表从头节点 head开始不降序, 同时由最后的节点指回头节点.给定这样 * 一个环形单链表的头节点 head和一个整数 num, 请生成节点值为 num的新节点,并插入到 * 这个环形链表中, 保证调整后的链表依然有序. * * 解题: * 1. 生成节点值为 num的新节点, 记为 node. * 2. 如果链表为空, 让 node自己组成环形链表, 然后直接返回node. * 3. 如果链表不为空, 令变量 pre=head

编程之美3:寻找数组中的最大值和最小值以及最大值和次大值

很开心,这是今天的第三篇文章啦!下午健身也感觉非常过瘾,托付宿舍妹子从日本代购的护肤品也到了.耳边漂浮着Hebe田馥甄的<魔鬼中的天使>文艺的声线,一切都好棒,O(∩_∩)O哈哈~.爱生活,爱音乐,爱运动,额,当然还有要爱学习啦!加油(^ω^) 额,扯远了.第三篇是关于寻找数组中的最大值和最小值.第一次看到这个题目的时候,楼主稍微鄙视了一下,因为觉得这个题目有什么好做的.但是楼主还是看了看<编程之美>上的写的,发现还是有必要记录一下,不一样的思考方式.很赞!大家和楼主一起哦,Are

code第一部分:数组 第十四题 雨水问题

code第一部分:数组 第十四题 雨水问题 Given n non-negative integers representing an elevation map where the width of each bar is 1, computehow much water it is able to trap after raining.For example, Given [0,1,0,2,1,0,1,3,2,1,2,1], return 6. 分析: 解决方案1 对于每个柱子,找到其左右两

第三十四课 二维数组的存储 【项目1-3】

第三十四课 二维数组的存储 项目一[二维数组当函数参数] 定义一个函数来完成对参数数组中元素的求和工作,函数声明如下: [cpp] view plain copy print? int sum(int array[ ][4],int m,int n);  //该函数完成对array数组中的前m行和n列元素求和 在以下程序的基础上,完成对sum函数的定义. [cpp] view plain copy print? #include <stdio.h> int sum(int array[ ][4

中文数字转换成阿拉伯数字(一千二百三十四万五千六百七十八--&gt;12345678)

昨天老大问我又没有写过中文数字转换成阿拉伯数字,我说没有,我说那应该简单啊,就是将中文对应的数字换成阿拉伯数字就好了啊,比如一就换成1,二就换成2…十换成10.可是那么问题来了…… 一十二呢…不能是1102吧…这不就坑爹了吗?一百万呢………所有我苦苦思索,花费了我差不多半天的时间,终于写出了下面的程序. 1 public static void main(String[] args){ 2 3 Map<Character, String> numberMap = new HashMap<

经典算法题每日演练——第二十四题 梳排序

原文:经典算法题每日演练--第二十四题 梳排序 这篇再看看一个经典的排序,梳排序,为什么取名为梳,可能每个梳都有自己的gap吧,大梳子gap大一点,小梳子gap小一点. 上一篇我们看到鸡尾酒排序是在冒泡排序上做了一些优化,将单向的比较变成了双向,同样这里的梳排序也是在冒泡排序上做了一些优化. 冒泡排序上我们的选择是相邻的两个数做比较,就是他们的gap为1,其实梳排序提出了不同的观点,如果将这里的gap设置为一定的大小, 效率反而必gap=1要高效的多. 下面我们看看具体思想,梳排序有这样一个1.

Java进阶(三十四)Integer与int的种种比较你知道多少?

Java进阶(三十四)Integer与int的种种比较你知道多少? 前言 如果面试官问Integer与int的区别:估计大多数人只会说到两点:Ingeter是int的包装类,注意是一个类:int的初值为0,Ingeter的初值为null.但是如果面试官再问一下Integer i = 1;int ii = 1; i==ii为true还是为false?估计就有一部分人答不出来了,如果再问一下其他的,估计更多的人会头脑一片混乱.所以我对它们进行了总结,希望对大家有帮助. 首先看代码: package