持续刷题第13天 !

今天我们继续刷Leetcode 热题 HOT 100,日复一日,相信自己,一定会有进步。如果一个人刷题太孤独了,欢迎加群每日一题算法群,让我们大家一起监督,一起成长。

此外我还建立了一个秋招信息群,有兴趣的同学可以到文末扫码加入一下。

Leetcode - 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]

解题思路:

基本的二分搜索

int binarySearch(int[] nums, int target) {int left = 0; int right = nums.length - 1; while(left <right) {int mid = (left + right) / 2;if(满足条件1){statement1;}else {statement2;}    }if(nums[left]==满足要找的那个数字)//满足条件return left;else  //抛出异常return -1;
}

用两次折半查找,一次确定上边界,一次确定下边界。

1.首先确定上边界
上边界的确定,其实我们根据数学里面有一个叫夹逼准则,我们要找到第一个大于等于他给的数也就是target

2.然后第二次确定下边界的时候找到最后一个小于等于这个的数(target)
两者结合就是我们的答案了,当然其中也需要我们去处理一些异常情况,如边界不存在

时间复杂度:O(logn)
空间复杂度:O(1)

class Solution {public int[] searchRange(int[] nums, int target) {if(nums.length==0)return new int[]{-1,-1};//异常处理int left=0;int right=nums.length-1;while(left<right){int mid=(left+right)/2+1;if(nums[mid]<=target)left=mid;else   right=mid-1;}if(nums[left]!=target)//若上边界不存在 那么也是异常return new int[]{-1,-1};//确定下边界int a=left;left=0;right=nums.length-1;while(left<right){int mid=(left+right)/2;if(nums[mid]>=target)right=mid;elseleft=mid+1;}int b=left;return new int[]{b,a};//返回结果}
}

往期回顾

LeetCode day 1 题号1、2(两数之和,两数相加)

LeetCode day 2 题号 3、4 (最长无重复子串,两个有序数组的中位数)

LeetCode day3 题号5 (最长回文子串)

LeetCode day 4  10.正则匹配

LeetCode day 5 盛最多水的容器(双指针)

LeetCode day 6 三数之和=两数之和plus

LeetCode day7 初入搜索

LeetCode day 8 19、20

LeetCode day 9 合并两个有序链表

LeetCode day 10 合并K个有序链表

LeetCode day 11 字典的下一个排列

LeetCode day 12 二分法的主要应用

这里建立了一个秋招备战群,主要是分享一下秋招实习的一些信息,欢迎小伙伴加入,但是要遵守群规则噢!

Leetcode热题 二分法的主要应用(2)-夹逼准则相关推荐

  1. 2010考研数学二第(16)题——极限:数列极限,夹逼准则,常考不等式,两问关联

  2. LeetCode 热题100答案

    leetcode 热题100 文章目录 leetcode 热题100 [2. 两数相加](https://leetcode-cn.com/problems/add-two-numbers/) [3. ...

  3. LeetCode 热题 HOT 100

    LeetCode 热题 HOT 100之JAVA解法 第1题 两数之和(简单) 代码 第2题 两数相加(中等) 代码 第3题 无重复字符的最长子串(中等) 代码 第4题 寻找两个正序数组的中位数(困难 ...

  4. leetcode热题HOT100汇总——java题解已完结撒花

    文章目录 前言 1. 两数之和 2. 两数相加 3.无重复字符的最长子串 4. 寻找两个正序数组的中位数 5. 最长回文子串 10. 正则表达式匹配 11. 盛最多水的容器 15. 三数之和 17. ...

  5. 【leetcode热题100】刷题记录(5-8)

    [leetcode热题100]刷题记录(5-8) 5. 最长回文子串 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个正序数组的中位数 5. 最长回文子串 题目链接 给你一个字符串 s,找到 ...

  6. 《LeetCode 热题 HOT 100》Java答案汇总版---持续更新中

    <LeetCode 热题 HOT 100>Java答案汇总版-持续更新中 个人认为<LeetCode 热题 HOT 100>中的题目特别适合算法新手进行一个入门的刷题,而且作者 ...

  7. LeetCode 热题 HOT 100 完整题解笔记知识点分类 C++代码实现

    1.知识点分布 填一下这个之前欠的天坑,复习一下算法入门的经典基础题. 除夕,正月初一,初二,一共写了三整天,除了吃饭就窝着补题. 每天30题+,整个人都写晕啦,终于写完啦() markdown生成 ...

  8. LeetCode 热题 HOT 100 -------160. 相交链表(链表)206. 反转链表(递归、回溯)

    dsadas /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* L ...

  9. LeetCode 热题 HOT — 字母异位词分组

    字母异位词分组 原题地址 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次. ...

最新文章

  1. python unix时间戳格式化输出_python正常时间和unix时间戳相互转换的方法
  2. java序列化的作用
  3. 【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)
  4. C++: 06---构造函数析构函数
  5. 计算机组成 冯诺依曼体制
  6. 手机端答题页面_有奖答题来啦!科普知识等你来挑战……
  7. win8怎么被远程计算机关闭,Win8系统局域网如何远程关机?Win8系统局域网远程关机的方法...
  8. VSCode下载安装和配置Java环境
  9. CNN结构:色彩特征提取-从RGB空间到HSV空间(色彩冷暖判断)
  10. Linux 下街机模拟器 mame 安装
  11. 【构建基于树莓派cm4的机器人控制系统的运行环境】
  12. 开手游该如何选用服务器?
  13. 隐藏与显示桌面上的单个图标
  14. Oracle觸發器調用procedure寄信
  15. Verilog学习笔记(一)
  16. 【锐捷无线】边缘感知配置
  17. Eclipse开发项目,“猥皮恩“连接,发布到现场
  18. DeepMind 发了篇论文,把我看笑了
  19. 程序员入门编程,看这10本书,少走10年弯路,java二级教学视频
  20. matlab中的代数环问题及其消除方法,Matlab中代数环问题和其消除方法.PDF

热门文章

  1. 联想拯救者14实现快捷键调屏幕亮度
  2. 揭示微软鲜为人知的秘密:观止--微软创建NT和未来的夺命狂奔 (Show Stopper!中文版)...
  3. Android--2048游戏
  4. 博导花了十天整理出来所有的Python库,只希望我学好后高薪就业!
  5. mssql和mysql的存储过程区别_MySQL和SQL Server存储过程写法上有什么区别?
  6. Twincat导出Scope数据(机器人控制),并采用origin绘图
  7. google 的达芬奇密码
  8. 看久了电脑打瞌睡太困啦
  9. 论文阅读笔记(8):Structured Sparse Subspace Clustering: A Joint Affinity Learning and Subspace Clustering
  10. Linux文件搜索命令介绍——locate、find、xargs、touch、stat