Binary Search 二分法方法总结

code教你做人:二分法核心思想是把一个大的问题拆成若干个小问题,最重要的是去掉一半或者选择一半。

二分法模板:

 public int BinarySearchTemplate(int[] nums,int target) {
if(nums == null || nums.length == 0) return -1;
int lo = 0;
int hi = nums.length - 1; //A: lo < hi [1,2]找1 找last position会死循环
//B: lo <= hi
//C: lo + 1 < hi
//lo + 1 < hi 相邻就要退出循环,lo = 1,hi = 2
while(lo + 1 < hi) {
int mid = lo + (hi - lo) / 2;
if(nums[mid] == target)
return mid;
else if(nums[mid] < target) {
lo = mid;
//hi = mid - 1 also works,但是不+1/-1更好记
}
else {
hi = mid;
//lo = mid + 1 also works
}
}
//lo + 1 < hi 方法需要在结尾判断lo和hi
if(nums[hi] == target) return hi;
if(nums[lo] == target) return lo; return -1;
}

两种类型题:

1.有序数列找特定值

【1】找target的下标,可能有重复,返回任意符合条件的index,无则return -1。

【2】返回target第一次出现的下标,可能有重复,无则return -1。

【3】返回trage最后一次出现的下标,可能有重复,无则return -1。(出现死循环的可能性很高 = > lo + 1 < hi 代替)

2.OOOOOOOXXXXXXXXXX 找圈圈叉叉的分割线

【1】找最后一个O

【2】找第一个X

结论:

1.+1不会对结果造成影响,只需要在最后只剩两个数的时候进行判断即可。

2.二分法的目的不是为了找到答案,而是为了缩小区间,从有限的候选中找出答案。

相关题目:

33. Search in Rotated Sorted Array

34. Find First and Last Position of Element in Sorted Array

35. Search Insert Position

74. Search a 2D Matrix

81. Search in Rotated Sorted Array II

153. Find Minimum in Rotated Sorted Array

154. Find Minimum in Rotated Sorted Array II

162. Find Peak Element

240. Search a 2D Matrix II

278. First Bad Version

354. Russian Doll Envelopes

528. Random Pick with Weight

852. Peak Index in a Mountain Array

Binary Search 二分法方法总结的更多相关文章

  1. Binary Search二分法搜索C++程序

    二分法基本上学计算机的都听过,但是有人不知道的就是其实二分法是减治法的思想. 所谓减治法和分治法有一个主要差别就是减治法是减去一般,就是分治之后只需要解决原问题的一半就可以了得到全局问题的解了.所以速 ...

  2. 270. Closest Binary Search Tree Value

    题目: Given a non-empty binary search tree and a target value, find the value in the BST that is close ...

  3. BINARY SEARCH 的一点说明

    在sap 之abap语言中,有‍BINARY SEARCH这个查找条件.使用read table 来读取内表时,使用‍BINARY SEARCH可以大大的提高查找的效率,为什么呢?学过数据库的人会知道 ...

  4. Leetcode之二分法专题-704. 二分查找(Binary Search)

    Leetcode之二分法专题-704. 二分查找(Binary Search) 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 t ...

  5. Validate Binary Search Tree(一定掌握的方法)

    Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...

  6. leetCode 95.Unique Binary Search Trees II (唯一二叉搜索树) 解题思路和方法

    Given n, generate all structurally unique BST's (binary search trees) that store values 1...n. For e ...

  7. [Leetcode][JAVA] Convert Sorted Array to Binary Search Tree && Convert Sorted List to Binary Search Tree

    Convert Sorted Array to Binary Search Tree Given an array where elements are sorted in ascending ord ...

  8. 九章算法系列(#2 Binary Search)-课堂笔记

    前言 先说一些题外的东西吧.受到春跃大神的影响和启发,推荐了这个算法公开课给我,晚上睡觉前点开一看发现课还有两天要开始,本着要好好系统地学习一下算法,于是就爬起来拉上两个小伙伴组团报名了.今天听了第一 ...

  9. 【数据结构05】红-黑树基础----二叉搜索树(Binary Search Tree)

    目录 1.二分法引言 2.二叉搜索树定义 3.二叉搜索树的CRUD 4.二叉搜索树的两种极端情况 5.二叉搜索树总结 前言 在[算法04]树与二叉树中,已经介绍过了关于树的一些基本概念以及二叉树的前中 ...

随机推荐

  1. java和js中int和String相互转换常用方法整理

    java中int和String的相互转换常用的几种方法: int  > String int i=10;String s="";第一种方法:s=i+""; ...

  2. iOS __block 关键字的底层实现原理 -- 堆栈地址的变更

    默认情况下,在block中访问的外部变量是复制过去的.但是可以加上 __block  来让其写操作生效. 原理: Block 不允许修改外部变量的值,这里所说的外部变量的值,指的是栈中指针的内存地址. ...

  3. Linux下复制文件

    命令: cp -Rf /文件名1/*               /文件名2 把文件夹1下的文件复制到文件2中(/* 表示复制文件夹1下的文件,不复制文件夹1)

  4. 使用教育邮箱激活JetBrains全家桶

    如果你还有在校时的邮箱,比如your_name@xxx.edu或者your_name@xxx.edu.cn的邮箱,那么你可以免费激活JetBrains全家桶. JetBrains Toolbox 专业 ...

  5. TYVJ P1039 【忠诚2】

    题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...

  6. pronaunciation

    5 strong  weak s            d n            t l             th you and I  -> you an dai -> you ...

  7. js form表单的校验

    if(!$("#form").validate().form()){ return false;} <元素 class="required">< ...

  8. VS 编译错误【error C4996: 'scanf': This function or variable may be unsafe. 】的解决方案

    在VS中编译 C 语言项目,如果使用了 scanf 函数,编译时便会提示如下错误: error C4996: 'scanf': This function or variable may be uns ...

  9. 【python 3】 函数 初识

    函数初识 1.函数的定义.调用.返回值 函数的定义.调用.返回值 def demo(): ## 定义函数 (def + 空格 + 函数名 + () + 冒号) ## 如下为函数体 return a # ...

  10. vitual dom实现(转)

    1. 通过JavaScript来构建虚拟的DOM树结构,并将其呈现到页面中: 2. 当数据改变,引起DOM树结构发生改变,从而生成一颗新的虚拟DOM树,将其与之前的DOM对比,将变化部分应用到真实的D ...