1、leetcode704 二分查找*
leetcode 704 二分查找
给定一个 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
文章目录
- leetcode 704 二分查找
- 二分法:方法一
- 二分法:方法二
二分法:方法一
这道题是二分查找里面最简单的一道题,我们可以从简单入手,看while循环里的条件到底怎么写,到底要不要=,以及right=mid还是right=mid-1等等。
建议方法一和方法二对照着看。
public int search(int[] nums, int target) {int left=0;int right=nums.length;//二分查找索引范围[left,right)//这边条件很重要,当left==right时,退出循环;为什么不写<=?//因为上面的索引范围是在[left,right),right是不包括的,如果<=,//那么left==right是满足循环条件的,但是下面nums[mid]必定会数组//角标越界,所以这边循环条件只能写<。while(left<right){ int mid=(left+right)>>1;if(nums[mid]==target){return mid;}else if(nums[mid]>target){//因为nums[mid]>target,right=mid;有人要问right=mid-1//行不行,不可以,因为mid-1很可能就是答案,上面的索引范围是//[left,right),right是不包括的,所以这边只能是right=mid。//写成right=mid-1,就相当于索引范围是[left,right],//左右都包括了,和一开始的条件不一致。right=mid;}else{left=mid+1;}}//即left==right,退出循环;right索引是不包括的,//left==right说明没有查找到,返回-1;return -1;}
二分法:方法二
public int search(int[] nums, int target) {int left=0;//和方法一的不同处,索引范围是[left,right]int right=nums.length-1;//这边退出循环的条件是left>right;通俗点讲就是left==right是程序的最后一次循环。//方法一不是这样的。方法一是当left==right就会退出循环。//为什么会这样?是因为初始化索引范围不同造成的。while(left<=right){int mid=(left+right)>>1;if(nums[mid]==target){return mid;}else if(nums[mid]>target){//因为nums[mid]>target,所以right=mid-1,注意这边不是//right=mid,因为nums[mid]已经不符合条件了,为了和初始化//索引范围一致,即[left,right],这边需要写成right=mid-1,//因为mid-1很可能就是答案,但是mid绝不可能是答案。right=mid-1;}else{//left和上面的right同理left=mid+1;}}//当left>right,退出循环return -1;}
1、leetcode704 二分查找*相关推荐
- LeetCode--704.二分查找(C++)
力扣链接 数组在内存中的空间地址是连续的 // // Created by lwj on 2022-03-30. // #include <iostream>using namespace ...
- 代码随想录Day01 | LeetCode704.二分查找、LeetCode27.移除元素
数组理论基础 数组是存放在连续内存空间上的相同类型数据的集合. 数组可以方便的通过下标索引的方式获取到下标下对应的数据 需要两点注意的是 数组下标都是从0开始的. 数组内存空间的地址是连续的 正是因为 ...
- 【LeetCode-704 | 二分查找】
#include <iostream> #include <vector> #include <queue> #include <stack> #inc ...
- leetcode704. 二分查找
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: num ...
- 代码随想录Day01:数组理论基础、二分查找、移除元素
目录 数组理论基础.二分查找.移除元素 1.数组理论基础 2.Leetcode704.二分查找 方法一 左闭右闭: 方法二 左闭右开: 方法三 左开右开: 方法四 左开右闭: 3.Leetcode27 ...
- 17道题带你理解二分查找
不太会的可以先看看二分查找的模板 点这里 最需要注意的是二分查找的分界线并不止局限于大于等于小于,而是对某种性质的一种分界 1.Leetcode704. 二分查找 class Solution {pu ...
- 二分查找算法的万能公式(LeetCode35、704、1095)
二分查找常常用于有序数组的查找操作.当然如果是一个问题,数组的顺序满足特定条件(不仅仅是升序或者降序,也可以是先升后降或先降后升),就可以通过逐步排查,缩小问题的规模的方式找到,这种算法也是二分查找算 ...
- 算法图解/二分查找/简单查找/选择排序/递归算法/快速排序算法/
大 O 表示法 大 O 表示法在讨论运行时间时,log 指的都是 log2 大 O 表示法指出了算法有多快,让你能够比较操作数,它指出了算法运行时间的增速,而并非以秒为单位的速度. 大 O 表示法指出 ...
- LeetCode简单题之二分查找
题目 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1. 示例 1: 输入: n ...
最新文章
- Maven-环境配置
- 服务器间无密码scp
- 第一章 自定义MVC框架
- android 数组赋值字符串_C语言奇淫技巧,字符串的三种表示方法,不会用不是合格的程序员...
- java设计模式观察者模式_Java设计模式(9)——观察者模式
- 卡通角色表情驱动系列二
- JS_13原型与原型链
- jfinal html5,Jfinal框架整合webSocket技术功能实现
- C++ 返回当前类名
- python百度百科-python语言是由哪个人创造的
- tab切换之图片切换
- 校验EXE文件防止软件被破解
- 光纤交换机 序列号_cisco查看光模块型号序列号命令
- macos双系统 wintogo_aigo固态硬盘,轻松实现macOS运行Windows双系统
- HDU6438 Buy and Resell
- kingbase之时间日期加减
- 【Verilog】FPGA驱动WS2812B点阵
- 此次告别ed2k链接文件下载烦恼
- 简单有效的多标准中文分词详解
- java中oops是什么意思_什么是oop思想_什么是OOPS
热门文章
- java 大小相间排序_ArrayList实现根据某属性大小相间排序
- c语言反编译_Gacrux:基于C语言的可自定义PE加载恶意软件
- 9中继器添加一列序号自增_三个动态自动更新EXCEL序号的小技巧,解决重复编号困扰...
- 用jk触发器构成二分频电路_深入了解数字电路之时序电路
- 网络安全比赛理论答题(六)
- Python基础教程:type()函数-动态创建类
- Python apply函数
- Python教程:Sys 与 Import 模块
- Python使用redis的消息队列
- python 输出所有大小写字母, range()以及列表切片