Leetcode热题 二分法的主要应用(2)-夹逼准则
持续刷题第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)-夹逼准则相关推荐
- 2010考研数学二第(16)题——极限:数列极限,夹逼准则,常考不等式,两问关联
- LeetCode 热题100答案
leetcode 热题100 文章目录 leetcode 热题100 [2. 两数相加](https://leetcode-cn.com/problems/add-two-numbers/) [3. ...
- LeetCode 热题 HOT 100
LeetCode 热题 HOT 100之JAVA解法 第1题 两数之和(简单) 代码 第2题 两数相加(中等) 代码 第3题 无重复字符的最长子串(中等) 代码 第4题 寻找两个正序数组的中位数(困难 ...
- leetcode热题HOT100汇总——java题解已完结撒花
文章目录 前言 1. 两数之和 2. 两数相加 3.无重复字符的最长子串 4. 寻找两个正序数组的中位数 5. 最长回文子串 10. 正则表达式匹配 11. 盛最多水的容器 15. 三数之和 17. ...
- 【leetcode热题100】刷题记录(5-8)
[leetcode热题100]刷题记录(5-8) 5. 最长回文子串 2. 两数相加 3. 无重复字符的最长子串 4. 寻找两个正序数组的中位数 5. 最长回文子串 题目链接 给你一个字符串 s,找到 ...
- 《LeetCode 热题 HOT 100》Java答案汇总版---持续更新中
<LeetCode 热题 HOT 100>Java答案汇总版-持续更新中 个人认为<LeetCode 热题 HOT 100>中的题目特别适合算法新手进行一个入门的刷题,而且作者 ...
- LeetCode 热题 HOT 100 完整题解笔记知识点分类 C++代码实现
1.知识点分布 填一下这个之前欠的天坑,复习一下算法入门的经典基础题. 除夕,正月初一,初二,一共写了三整天,除了吃饭就窝着补题. 每天30题+,整个人都写晕啦,终于写完啦() markdown生成 ...
- LeetCode 热题 HOT 100 -------160. 相交链表(链表)206. 反转链表(递归、回溯)
dsadas /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* L ...
- LeetCode 热题 HOT — 字母异位词分组
字母异位词分组 原题地址 给你一个字符串数组,请你将 字母异位词 组合在一起.可以按任意顺序返回结果列表. 字母异位词 是由重新排列源单词的字母得到的一个新单词,所有源单词中的字母通常恰好只用一次. ...
最新文章
- python unix时间戳格式化输出_python正常时间和unix时间戳相互转换的方法
- java序列化的作用
- 【算法设计与分析】16 分治策略:快速排序(快速排序的时间复杂度计算)
- C++: 06---构造函数析构函数
- 计算机组成 冯诺依曼体制
- 手机端答题页面_有奖答题来啦!科普知识等你来挑战……
- win8怎么被远程计算机关闭,Win8系统局域网如何远程关机?Win8系统局域网远程关机的方法...
- VSCode下载安装和配置Java环境
- CNN结构:色彩特征提取-从RGB空间到HSV空间(色彩冷暖判断)
- Linux 下街机模拟器 mame 安装
- 【构建基于树莓派cm4的机器人控制系统的运行环境】
- 开手游该如何选用服务器?
- 隐藏与显示桌面上的单个图标
- Oracle觸發器調用procedure寄信
- Verilog学习笔记(一)
- 【锐捷无线】边缘感知配置
- Eclipse开发项目,“猥皮恩“连接,发布到现场
- DeepMind 发了篇论文,把我看笑了
- 程序员入门编程,看这10本书,少走10年弯路,java二级教学视频
- matlab中的代数环问题及其消除方法,Matlab中代数环问题和其消除方法.PDF
热门文章
- 联想拯救者14实现快捷键调屏幕亮度
- 揭示微软鲜为人知的秘密:观止--微软创建NT和未来的夺命狂奔 (Show Stopper!中文版)...
- Android--2048游戏
- 博导花了十天整理出来所有的Python库,只希望我学好后高薪就业!
- mssql和mysql的存储过程区别_MySQL和SQL Server存储过程写法上有什么区别?
- Twincat导出Scope数据(机器人控制),并采用origin绘图
- google 的达芬奇密码
- 看久了电脑打瞌睡太困啦
- 论文阅读笔记(8):Structured Sparse Subspace Clustering: A Joint Affinity Learning and Subspace Clustering
- Linux文件搜索命令介绍——locate、find、xargs、touch、stat