Leetcode二分查找算法
来源:互联网 发布:通达信日线数据 编辑:程序博客网 时间:2024/06/06 05:30
Python的二分搜索模块
#从左边开始找一个位置bisect.bisect_left(arr, target)#从右边找到一个位置bisect.bisect_right(arr, target)bisect.bisect(arr, target)#有序插入bisect.insort(arr, target)#例:arr:[1,2,2,4,5,6]bisect_left(arr,2) => 1bisect_right(arr, 2) => 3
Search for a Range
Given an array of integers sorted in ascending order, find the starting and ending position of a given target value.
Given [5, 7, 7, 8, 8, 10] and target value 8,return [3, 4].If the target is not found in the array, return [-1, -1].
Python代码
import bisectclass Solution: def searchRange(self, nums, target): re1 = bisect.bisect_left(nums,target) re2 = bisect.bisect(nums,target) if re2 == re1: return [-1,-1] return [re1, re2-1]
Search in Rotated Sorted Array
Suppose an array sorted in ascending order is rotated at some pivot unknown to you beforehand.
(i.e., 0 1 2 4 5 6 7 might become 4 5 6 7 0 1 2).
You are given a target value to search. If found in the array return its index, otherwise return -1.
You may assume no duplicate exists in the array.
#先找出旋转点#通过realmid = (mid + rot) % n找出真实的中点class Solution(object): def search(self, nums, target): lo, hi = 0, len(nums)-1 while lo < hi: mid = (lo + hi) // 2 if nums[mid] > nums[hi]: lo = mid + 1 else: hi = mid rot = lo lo, hi = 0, len(nums)-1 while lo <= hi: mid = (hi + hi) // 2 realmid = (mid + rot) % len(nums) if nums[realmid] == target: return realmid if nums[realmid] < target: lo = mid + 1 else: hi = mid - 1 return -1
public int search(int[] A, int target) { int lo = 0; int hi = A.length - 1; if (hi < 0) { return -1; } while (lo < hi) { int mid = (lo + hi) / 2; if (A[mid] == target) return mid; if (A[lo] <= A[mid]) { if (target >= A[lo] && target < A[mid]) { hi = mid - 1; } else { lo = mid + 1; } } else { if (target > A[mid] && target <= A[hi]) { lo = mid + 1; } else { hi = mid - 1; } } } return A[lo] == target ? lo : -1;}
阅读全文
0 0
- Leetcode二分查找算法
- 查找算法 二分查找
- 查找算法:二分查找
- 算法--查找--二分查找
- 查找算法---二分查找
- [算法]二分查找算法
- 算法----二分查找算法
- 查找算法:二分查找算法
- 数据结构与算法-LeetCode练习二分查找应用
- leetcode 二分查找系列
- LeetCode二分查找总结
- leetcode二分排序 & 查找:
- LeetCode专题: 二分查找
- [转载]查找算法----二分查找
- 查找算法之二分查找
- 查找算法之二分查找
- 查找算法_二分查找
- 算法 二分查找(折半查找)
- 第14章 高级I/O函数
- python3 使用决策树进行分类
- 理解dojo.require机制
- 数据类型
- 数据结构实验项目三:队列的基本操作应用
- Leetcode二分查找算法
- An Easy Problem?! POJ 2826 计算几何
- ubuntu快速安装实现keepalived的主备切换
- augular之通讯HttpClient
- Percona XtraBackup 完全及增量备份与恢复的方法
- 求水仙花数
- C++得到函数执行所用时间
- Ruby基础学习(一)
- 编写Qt Designer自定义控件(一)——如何创建并使用Qt自定义控件