LeetCode题解:704.二分查找
二分查找(easy)
更好的阅读体验应该是:
- 审题-思考
- 答题
- 整理-归纳
一、题目
LeetCode:704.二分查找
给定一个 n
个元素有序的(升序)整型数组 nums
和一个目标值 target
,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
你可以假设 nums 中的所有元素是不重复的。
二、二分法解题
二分查找是一种基于比较目标值和数组中间元素的教科书式算法。
- 如果目标值等于中间元素,则找到目标值。
- 如果目标值较小,继续在左侧搜索。
- 如果目标值较大,则继续在右侧搜索。
时间复杂度:O(logN)
。
空间复杂度:O(1)
。
模版 I
- 确定初始的左右边界:
left
: 0right
: nums.length-1mid
: (left + right) >> 1
- 如果中间元素值
nums[mid]
< target:证明中间值左侧包括中间值都不符合要求,可以直接排除,left = mid + 1
- 如果中间元素值
nums[mid]
:证明中间值右侧包括中间值都不符合要求,可以直接排除,right = mid - 1
- 如果中间元素值
nums[mid]
= target:直接返回mid
的下标 - 重新定义了左右边界,也需要重新计算中间值,我们需要继续进行范围的排除
- 定义搜索的条件,应该是搜索区间都不为空,即
left <= right
Javasciprt 代码
var search = function(nums, target) {let left = 0; // 初始左边界let right = nums.length - 1; // 初始右边界// 如果left > right 证明整个数组结束了仍没有找到目标值while (left <= right) {let mid = left + Math.floor((right - left) / 2); //防止溢出if (target === nums[mid]) {return mid;} else if (target > nums[mid]) {// 目标值大于中值,则中间左侧可以抛弃了left = mid + 1;} else {// 目标值小于中值,则中间右侧可以抛弃了right = mid - 1;}}return -1;
};
三、写在最后
上面的代码就是二分法模板 I,看过我的二分法总结的同学应该知道,凭借这套模版以及对应的分析,类似的问题应该难不住你了。
如果对你有所帮助不妨给本项目的github 点个 star,这是对我最大的鼓励。
关于我
- 花名:余光
- WX:j565017805
- 沉迷 JS,水平有限,虚心学习中
其他沉淀
- Github:JavaScript 版 LeetCode 题解
- 在线版:前端进阶笔记
- CSDN博客汇总
LeetCode题解:704.二分查找相关推荐
- LeetCode No.704 二分查找 No.27移除元素
LeetCode No.704 二分查找 题目描述: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在 ...
- LeetCode Algorithm 704. 二分查找
704. 二分查找 Ideas 这题想考察二分查找的来着. 对不起,真的对不起,作为Python爱好者,实在没忍住,就一行代码解决了. Code Python from typing import L ...
- leetcode系列--704.二分查找
leetcode系列–第704题.二分查找 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否 ...
- JS刷题第一天| 704. 二分查找、27. 移除元素
704. 二分查找 题目链接:力扣 文章讲解:代码随想录 视频讲解:手把手带你撕出正确的二分法 | 二分查找法 | 二分搜索法 | LeetCode:704. 二分查找_哔哩哔哩_bilibili 看 ...
- Leetcode 704.二分查找 27.移除元素 代码随想录day1
本系列目的在于跟练代码随想录,以及记录自己在数据结构与算法方面的一些学习 704.二分查找 其实之前自己在随便刷题的时候看过这道题目,就是一个纯新手的大状态,第一次听到二分查找这样的东西,然后跟着题解 ...
- [LeetCode]704.二分查找及相关题目
数组理论基础 数组理论 数组是存放在连续内存空间上的相同类型数据的集合 数组可以方便的通过下标索引的方式获取到下标下对应的数据 二维数组在内存的空间地址是连续的 二分查找 LeetCode 704.二 ...
- C#LeetCode刷题-二分查找
二分查找篇 # 题名 刷题 通过率 难度 4 两个排序数组的中位数 C#LeetCode刷题之#4-两个排序数组的中位数(Median of Two Sorted Arrays)-该题未达最优解 30 ...
- 代码随想录01 | 704二分查找和27移除元素
目录 一 .二分查找 1 二分查找 2 搜索插入位置 3 在排序数组中查找元素的第一个和最后一个位置 二.移除元素 一 .二分查找 1 二分查找 704 二分查找https://leetcode.c ...
- Suzy找到实习了吗 Day 1 | 704. 二分查找、27. 移除元素
Suzy找到实习了吗 | 704. 二分查找.27. 移除元素 Leetcode 704:二分搜索 收获 Divide and conquer Recursive relation Python 3 ...
最新文章
- 【转】ExtJS DateField 日期控件Format格式化
- python模块初始与time、datetime及random
- 直接点不玩虚的--启明云端千元现金红包、50pcs开发板直播现场拿走不谢
- Java学习笔记(7)——输入输出
- 【转】75个最佳Web设计资源
- win7记事本txt图标显示异常解决方法
- Nginx 静态页面POST 请求提示405 Not Allowed
- 28. HTTP、SSL/TLS和HTTPS协议的区别与联系
- setuna截图软件怎么用_苹果手机笔记怎么做?用哪款笔记软件好
- tomcat7下载安装
- 八位超前进位加法器八位行波进位加法器
- mouseover和mouseenter区别
- python数据转换成pdf_用python把ipynb文件转换成pdf文件过程详解
- eterm协议指令解析
- html网页设计优秀作品和代码,从优秀的网页设计作品中学排版和配色
- BZOJ 4008: [HNOI2015]亚瑟王
- 微信分组群发45028,微信分组群发has no masssend quota hint
- 生产者消费者1.0(wait notify)
- 创新点定义,如何写创新点
- 白嫖小程序云存储空间,手撸你的专属云盘