【算法总结】Binary search 二分法
来源:互联网 发布:高性能网络编程 陶辉 编辑:程序博客网 时间:2024/04/30 08:55
- 描述:
二分法主要用于查找在有序的数列下某个特定条件下的边界或者特定值。 - 例题:
- 单递增序列:
- Search Insert Position
- Search a 2D Matrix
- Search Insert Position
- 断层序列:找Mid 和 start的关系。
- Find Minimum in Rotated Sorted Array
- Find Minimum in Rotated Sorted Array
- 有增有减得序列:找每一个区间的关系。
- Find Peak Element
- Find Peak Element
- 构建递增序列:
- Longest Increasing Subsequence
- Longest Increasing Subsequence
- 单递增序列:
- 解决方法:
- 无序的话,先排序寻找有序的区间进行二分。
- 用两个指针,不断的二分寻找区间,判断舍弃哪个一半的区间。
- 最后判断处理结束条件,是左边界结束还是右边界。
- 复杂度:
- 时间复杂度:对一段序列的二分是 O(Logn), n是序列的长度,如果要先排序的,增增加O(nlogn)的排序时间。
- 空间复杂度:两个指针的空间 O(1)
- 代码模板:
public int binarySearch(int[] nums, int target){//如果序列无序,先进行排序Arrays.sort(nums);//用两边界作为指针不断二分int l =0;int r = nums.length;//l+1<r 是保证l在r左边不重合结束while(l+1 < r){int mid = l + (r-l)/2;//找到target就返回if(nums[mid] == target){return mid;}//根据区间切分if(nums[mid] > target){r = mid;}else{l = mid;}}//如果还没结束,则判断下边界,l在r右边.先判断l还是先判断r,看具体条件。if(nums[l] == target){return l;}else if(nums[r] == target){return r;}return 0;}
0 0
- 【算法总结】Binary search 二分法
- ABAP BINARY SEARCH--二分法
- Binary Search(二分法查找)
- BINARY SEARCH 二分法实践
- 二分法查找(Binary Search)
- 二分法(binary search)
- ABAP BINARY SEARCH--二分法
- 二分法 Binary Search
- binary search-二分法模板
- 二分法(Binary Search)介绍
- Binary search (sorted array) 二分法
- Java二分法(Binary Search)查找递归算法与迭代算法
- 【算法总结】Binary Tree & Binary Search Tree 二叉树
- Binary Search二分法搜索C++程序
- LeetCode 之二分法查找 Binary search
- 算法 binary search
- Binary search Tree 总结
- Binary Search二分法搜索递归和非递归C++程序
- json格式请求http
- BZOJ 1183 Croatian2008 Umnozak
- SwipeRefreshLayout完美添加及完善上拉加载功能
- java将集合保存到excel中
- 本科教育忽略的黄金C++<3> 泛型算法
- 【算法总结】Binary search 二分法
- 选择排序-java
- Android 获取当前网速质量调整网络请求
- EntityManager方法简介
- AsyncTask和Handler的优缺点比较
- UIApplication讲解
- bzoj3673&3674 可持久化并查集 可持久化线段树
- 网络请求之HttpURLConnection[不全,以后在补充]
- 分享一个免费的虚拟主机