LeetCode0704-二分查找
LeetCode0704-二分查找
题目:
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
示例 1:
输入: nums = [-1,0,3,5,9,12], target = 9
输出: 4
解释: 9 出现在 nums 中并且下标为 4
示例 2:
输入: nums = [-1,0,3,5,9,12], target = 2
输出: -1
解释: 2 不存在 nums 中因此返回 -1
提示:
你可以假设 nums 中的所有元素是不重复的。
n 将在 [1, 10000]之间。
nums 的每个元素都将在 [-9999, 9999]之间。
代码:
/*** 0704-二分查找* 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。* <p>* 示例 1:* <p>* 输入: nums = [-1,0,3,5,9,12], target = 9* 输出: 4* 解释: 9 出现在 nums 中并且下标为 4* <p>* 示例 2:* <p>* 输入: nums = [-1,0,3,5,9,12], target = 2* 输出: -1* 解释: 2 不存在 nums 中因此返回 -1* <p>* 提示:* <p>* 你可以假设 nums 中的所有元素是不重复的。* n 将在 [1, 10000]之间。* nums 的每个元素都将在 [-9999, 9999]之间。*//*** 暴力解法*/
class Solution01 {public int search(int[] nums, int target) {for (int i = 0; i < nums.length; i++) {if (nums[i] == target) {return i;}}return -1;}
}/*** 二分查找*/
class Solution02 {public int search(int[] nums, int target) {int left = 0;int right = nums.length - 1;while (left <= right) {/** mid = left + (right - lef) / 2 等同于 mid = (left + right) /2 ,* 为了防止先进行加法防止溢出,采用该方式。*/int mid = left + (right - left) / 2;if (nums[mid] == target) {return mid;} else if (nums[mid] < target) {left = mid + 1;} else if (nums[mid] > target) {right = mid - 1;}}return -1;}
}
/**
* 测试类
*/
public class Study0704 {public static void main(String[] args) {System.out.println(new Solution02().search(new int[]{-1, 0, 3, 5, 9, 12}, 9));}
}
结果:
LeetCode0704-二分查找相关推荐
- LeetCode0704.二分查找 Go语言AC笔记
时间复杂度:O(log n) 解题思路 初始化left和right指针,for循环条件为left<right,循环内计算mid,比较target和nums[mid]的大小,如果相等就返回mid, ...
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- LeetCode简单题之二分查找
题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...
- 二分查找模板全面总结
二分查找 二分法的引入 情形1 1.X的平方根 2.搜索旋转排序数组 情形2 1.第一个错误的版本 2.寻找峰值 3.寻找旋转排序数组中的最小值 情形3 在排序数组中查找第一个和最后一个位置 当遇到查 ...
- 数据结构与算法(8-2)有序表查找(折半查找(二分查找)、插值查找)
目录 一.折半查找(二分查找) 二.插值查找 总代码 一.折半查找(二分查找) 原理:一次次折半,不断向着查找值的位置靠近 . 适用场景:有序(必须) 流程:开始时,min标志首,max标志尾,med ...
- 二分查找算法的一点改进
在计算机科学中,二分查找,是一种在有序数组中查找某一特定元素的搜索算法.这种搜索算法每一次比较都使搜索范围减半.第一篇二分查找的论文发表于1946年,然而第一个没有bug的二分查找算法却是在1962年 ...
- 二分法:二分查找(递归+非递归)实现
二分查找又称折半查找,首先,假设表中元素是按升序排列,将 表中间位置的关键字与查找关键字比较: 如果两者相等,则查找成功; 否则利用中间位置将表分成前.后两个子表: 1)如果中间位置的关键字大于查找关 ...
- python数据结构与算法:二分查找
二分查找:python 实现 def binary_seaech(alist,item):"""二分查找 递归实现"""n = len(al ...
- 【C++】C++11 STL算法(四):二分查找法(Binary search operations)、合并操作
目录 一.lower_bound 1.原型: 2.说明: 3.官方demo 二.upper_bound 1.原型: 2.说明: 3.官方demo 三.binary_search 1.原型: 2.说明: ...
- 二分查找的循环实现和递归实现
自己实现了二分查找的循环实现和递归实现 说明:二分查找适用于顺序存储结构,不适于链式存储结构,是一个高效的查找方法.虽然折半查找效率高,但是要排序,排序本身是一种很费时的运算. 要求传入的表是 ...
最新文章
- 【点云论文速读】最佳点云分割分析
- VS恢复默认设置的2种方法
- Python中通过lambda抛异常的奇技淫巧
- [Redux/Mobx] 举例说明怎么在redux中定义action?
- 解决yum锁定Another app is currently holding the yum lock; waiting for it to exit...
- xhtml html
- Android 进程间通信——AIDL
- python画图颜色代码_Python-使用matplotlib创建自己的颜色图并绘制颜色比例
- Bootstrap-点击“×”,可以关闭页面
- 视频播放时,关键帧丢失时造成的透明水影现象
- PCIE知识点-003:PCIE协议中的upstream概念
- 碰见参数错误咋解决?
- 极虎病毒创造的四个最
- 等差数列java用等差公式写_等差数列
- ggplot2作图之PcoA
- 罗技 Logitech flow 连接
- Asterisk电子传真-5
- EasyX入门和介绍
- 云技术背景下ssl证书可以提供怎样的安全服务呢?
- 【分治】02:二分答案