Binary Search 二分法方法总结
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 二分法方法总结的更多相关文章
- Binary Search二分法搜索C++程序
二分法基本上学计算机的都听过,但是有人不知道的就是其实二分法是减治法的思想. 所谓减治法和分治法有一个主要差别就是减治法是减去一般,就是分治之后只需要解决原问题的一半就可以了得到全局问题的解了.所以速 ...
- 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 ...
- BINARY SEARCH 的一点说明
在sap 之abap语言中,有BINARY SEARCH这个查找条件.使用read table 来读取内表时,使用BINARY SEARCH可以大大的提高查找的效率,为什么呢?学过数据库的人会知道 ...
- Leetcode之二分法专题-704. 二分查找(Binary Search)
Leetcode之二分法专题-704. 二分查找(Binary Search) 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 t ...
- Validate Binary Search Tree(一定掌握的方法)
Given a binary tree, determine if it is a valid binary search tree (BST). Assume a BST is defined as ...
- 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 ...
- [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 ...
- 九章算法系列(#2 Binary Search)-课堂笔记
前言 先说一些题外的东西吧.受到春跃大神的影响和启发,推荐了这个算法公开课给我,晚上睡觉前点开一看发现课还有两天要开始,本着要好好系统地学习一下算法,于是就爬起来拉上两个小伙伴组团报名了.今天听了第一 ...
- 【数据结构05】红-黑树基础----二叉搜索树(Binary Search Tree)
目录 1.二分法引言 2.二叉搜索树定义 3.二叉搜索树的CRUD 4.二叉搜索树的两种极端情况 5.二叉搜索树总结 前言 在[算法04]树与二叉树中,已经介绍过了关于树的一些基本概念以及二叉树的前中 ...
随机推荐
- Chrome VSCode常用快捷键
MAC下快捷键 Chrome快捷键: 关闭标签页:Cmd + w 新建标签页:Cmd + t 切换到指定标签页:Cmd + 数字 正向切换标签页: Ctrl + Tab 反向切换标签页: Ctrl + ...
- Go-单元测试
文章转载地址:https://www.flysnow.org/2017/05/16/go-in-action-go-unit-test.html 什么是单元测试? 单元测试一般用来测 ...
- laravel文件上传
一.视图文件代码 <td> <input type="file" name="brand_logo" id="logo" ...
- Javaweb里“容器“为何出现,应用在哪,未来发展趋势
容器是一个Java 所编写的程序,可当做一个工具,没有容器时必须自行编写程序以管理对象关系,现在容器都会自动做好. 有一说法:如果有一个类专门用来存放其它类的对象,这个类就叫做容器.另一说法:容器里存 ...
- centos7安装python,mariaDB,django,nginx
0,安装centos7 centos默认不开启网卡,需要在安装时将ens33设置为on,或者后续通过vi ifcfg-ens33,找到onboot,设置为yes ssg登陆centos7时,如果提示W ...
- JVM调优(一)
JVM调优的主要过程有: 确定堆内存大小(-Xmx, -Xms).合理分配新生代和老生代(-XX:NewRation, -Xmn, -XX:SurvivorRatio).确定永久区大小: -XX:Pe ...
- Android Satudio的使用记录
Satudio的使用记录之导入新项目: Satudio导入项目的心得[基本分为4步完成]1.需要保证自己的satudio中项目能够运行,同时找到该工作空间的和项目的各个参数 {项目-->右键—— ...
- 解决Git Revert操作后再次Merge代码被冲掉的问题
转:https://blog.csdn.net/paul_wei2008/article/details/77477932 https://blog.csdn.net/cxn945/article/d ...
- Headless Service 和Service
定于spec:clusterIP: None 还记得Service的Cluster IP是做什么的吗?对,一个Service可能对应多个EndPoint(Pod),client访问的是Cluster ...
- mybatis逆向工程generatorConfiguration详细配置
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE generatorConfiguratio ...