首页 > 其他分享 >二分查找

二分查找

时间:2024-01-31 23:11:43浏览次数:22  
标签:二分 target nums int mid 查找

704. 二分查找(Easy)

问题描述:给定一个 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
//思路:典型的二分查找
//写法一:在区间 [l,r]中查找target元素
public int search(int[] nums, int target) {
  int l = 0;
  int r = nums.length -1;
  while(l<=r){
    int mid = (r-l)/2 + l;
    if(nums[mid]==target){
      return mid;
    }else if(nums[mid]>target){
      r = mid-1;
    }else{
      l = mid+1;
    }
  }
  return -1;
}
//写法二:在区间 [l,r)中查找target元素
public int search(int[] nums, int target) {
  int l = 0;
  int r = nums.length;
  while(l<r){
    int mid = (r-l)/2 + l;
    if(nums[mid]==target){
      return mid;
    }else if(nums[mid]>target){
      r = mid;
    }else{
      l = mid+1;
    }
  }
  return -1;
}

参考:

标签:二分,target,nums,int,mid,查找
From: https://www.cnblogs.com/i9code/p/18000328

相关文章

  • 查找目录中所有内容文本中不含某个特定字符串的文件列表
    查找目录中所有内容中不含某个特定字符串的文件的列表find/your/search/dir-typef!-execgrep-q"PatternString"{}\;-print-typef表示只查找文件;!表示对匹配条件进行取反,即不含特定字符串;{}\; 将每个被找到的文件作为参数传递给find后面的grep命令,其中:花......
  • C语言实现二分法
    现在有一个任务:从一堆有序数字中找出其中一个数字有两种方法1)从头到尾依次寻找2)从该些数字中中间部位比较若小于要找数字则在后半部分否则在前半部分再进行这样的方式进行循环,直至找到或找不到此数字现介绍这样的方法——二分法在计算机科学中,二分搜索(英语:binarysearch),也称折半搜......
  • 二分查找的改进
    publicstaticintbinarySearch(int[]arr,inttarget){//设置左边位置intleft=0;//设置右边位置intright=arr.length-1;//循环条件:如果左边位置小于等于右边位置while(left<=right){//中间位置等于(左边+右边)/2intmid=(right+left)>>>1;......
  • 随机二分
    思想随机二分即随机在当前的二分区间内找出一个元素作为\(mid\),并和普通二分一样收缩左右端点。由于每次合法区间长度期望折半,于是复杂度仍然正确,\(O(\logn)\)次收缩即可使区间中只有一个元素。在元素容易比较,容易求排名,而难以根据排名求元素时可以考虑随机二分。简单应用......
  • 二分查找(折半查找)
    二分查找的前提:数组中的数据必须是有序的核心思想:每次排除一半的数据,查询数据的性能明显提高很多实现步骤1.定义两个变量,一个代表左边位置,一个代表右边位置2.定义一个循环控制折半3.每次折半,都算出中间位置处的索引4.判断当前要找的元素值,与中间位置处的元素值的大小情况往......
  • KY27 查找学生信息C++
    用map做查找就行了。#include<iostream>#include<string>#include<map>usingnamespacestd;structnode{stringname;stringx;intage;};typedefstructnodesinfo;intmain(){intn;while(cin>>n){map<......
  • AtCoder Beginner Contest 338 c题二分思路
    观察题目可知,会有一个最大的x(两个菜的最大制作数),大于这个x就不能做任何一盘菜,小于这个x那么一定可以做出来,这样分析就是显而易见的递归。实现递归的check函数,那么我们就可以把两个菜的总制作数传进去。那么什么时候true什么时候false呢,就是判断每种材料的制作量有没有超过原材料......
  • Leetcode刷题第五天-二分法-回溯
    215:第k个最大元素链接:215.数组中的第K个最大元素-力扣(LeetCode)em~~怎么说呢,快速选择,随机定一个目标值,开始找,左边比目标小,右边比目标大,左右同时不满足时,交换左右位置,直到左指针比右指针大,交换目标和右指针位置的值,此时右指针位置即时目标值的在排序好数组中的位置,如果k在右......
  • 二分算法
    二分算法个人感想洛谷二分题单基本完成,发现二分确实是比较模板的方式解答题目,难点往往是寻找出答案的单调性和如何高效验证答案的正确性。二分个人感觉就是枚举的优化,在时间复杂度上的极大优化,有一种暴力的美.目前发现的不足对题目的理解太浅,有时很难看懂题目的意思,理解有问......
  • 【学习笔记】二分图
    1.定义一个二分图满足有一种划分方案使得它节点的被分为两部分,且所有边的端点所在的部分不相同。即每条边都连接两个部分。变量说明:没有特殊说明时,\(n\)表示a部分点数,\(m\)表示b部分点数,\(e\)表示边数。2.判定显然我们给二分图染色,确定一个点所有点都确定。如果在染的......