变形的二分查找
2016-10-18 10:29
267 查看
在旋转有序数组中查找特定值
1.数组中没有重复的数,查找特定值,若存在,返回其下标,若不存在,返回-1
如[10,12,1,2,6,8] 12 返回1
[10,12,1,2,6,8] 0 返回-1
2.数组中有重复的数,查找特定值,若存在,返回true,若不存在,返回false
如[10,12,12,1,2,6,8,10] 10 返回true
[10,12,12,1,2,6,8,10] 0 返回false
1.Search in Rotated Sorted Array
数组中没有重复的数
若nums[start]<=nums[mid],则左半部分递增,先在左半部分搜索
若搜索不到,则往右半部分搜索
若nums[start]>nums[mid],则右半部分递增,先在右半部分搜索
若搜索不到,则往左半部分搜索
2.Search in Rotated Sorted Array II
数组中存在重复的数,则当nums[start]==nums[mid]
无法确定数组的递增序列,需要进一步查找
1.数组中没有重复的数,查找特定值,若存在,返回其下标,若不存在,返回-1
如[10,12,1,2,6,8] 12 返回1
[10,12,1,2,6,8] 0 返回-1
2.数组中有重复的数,查找特定值,若存在,返回true,若不存在,返回false
如[10,12,12,1,2,6,8,10] 10 返回true
[10,12,12,1,2,6,8,10] 0 返回false
1.Search in Rotated Sorted Array
数组中没有重复的数
若nums[start]<=nums[mid],则左半部分递增,先在左半部分搜索
若搜索不到,则往右半部分搜索
若nums[start]>nums[mid],则右半部分递增,先在右半部分搜索
若搜索不到,则往左半部分搜索
class Solution { public: int search(vector<int>& nums, int target) { const int size=nums.size(); int start=0,end=size-1; while(start<=end) { int mid=start+(end-start)/2; if(nums[mid]==target) return mid; if(nums[start]<=nums[mid]) { if(nums[start]<=target&&target<nums[mid]) end=mid-1; < 4000 span class="hljs-keyword">else start=mid+1; } else { if(nums[mid]<target&&target<=nums[end]) start=mid+1; else end=mid-1; } } return -1; } };
2.Search in Rotated Sorted Array II
数组中存在重复的数,则当nums[start]==nums[mid]
无法确定数组的递增序列,需要进一步查找
class Solution { public: bool search(vector<int>& nums, int target) { const int size=nums.size(); int start=0,end=size-1; while(start<=end) { int mid=start+(end-start)/2; if(nums[mid]==target) return true; if(nums[start]<nums[mid]) { if(nums[start]<=target&&target<nums[mid]) end=mid-1; else start=mid+1; } else if(nums[start]>nums[mid]) { if(nums[mid]<target&&target<=nums[end]) start=mid+1; else end=mid-1; } else ++start; } return false; } };
相关文章推荐
- 面试题_二分查找及其变形
- Search a 2D Matrix,在有序矩阵查找,二分查找的变形; 行有序,列有序查找。
- 二分查找极其变形算法
- 微软的二分查找变形题
- Find Minimum in Rotated Sorted Array I&&II——二分查找的变形
- 算法学堂 - 二分查找及其变形
- 二分查找及变形
- 二分查找及其变形整理
- [二分查找变形]弯曲的木杆(POJ 1905)
- 二分查找 变形
- 二分查找变形
- 算法-分割有序数组后查值-二分查找的变形
- 51nod 1279 扔盘子 (二分查找的变形)
- 二分查找及其几个变形
- 最长上升子序列变形题-二分查找DP
- 【小米笔试题】二分查找算法的变形
- poj 1064 二分查找变形—判定并找到可行解
- 你真的能搞定二分查找吗 — 二分查找及变形
- 二分查找及其变形算法
- 二分查找及其变形总结