leetcode挨个儿刷150515(10):Search in Rotated Sorted Array
来源:互联网 发布:瑞斯康微电子知乎 编辑:程序博客网 时间:2024/04/30 14:51
题目内容:
Suppose a sorted array 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.
说明:
1,这个题目是在数组中查找目标元素,最坏的时间复杂度都是O(n)的,最差就是从头到尾的查找一遍。这个也是可以通过的。2,好一点的思路,因为是有序的数组,关键在于扭转点的发现。使用二叉查找的思路,复杂度是O(logn)。
注意:有序或基本有序的数组的查找问题,都应该想到二叉查找。
第一种思路的代码:(略傻)
class Solution {public: int search(int A[], int n, int target) { int i = 0; for(; i < n; i++) { if( target == A[i] ) return i; } if(i==n) return -1; }};
第二种思路的代码:
class Solution {public: int search(vector<int>& nums, int target) { int size = nums.size(); if(size <= 0) return size; int left = 0; int right = size - 1; int middle = (left + right) / 2; if(nums[middle] == target) return middle; else if(nums[middle] < nums[right]) { if((target > nums[middle]) && (target <= nums[right]) ) { return BinarySearch(nums,middle + 1,right,target); } else { return SearchRotate(nums,left,middle - 1,target); } } else { if((target >= nums[left]) && (target < nums[middle]) ) { return BinarySearch(nums,left,middle - 1,target); } else { return SearchRotate(nums,middle + 1,right,target); } } } int BinarySearch(vector<int>& nums,int left,int right,int target)
<span style="font-family: Arial, Helvetica, sans-serif;">//在单调有序的数组中查找目标元素,二叉查找</span> { if(left > right) return -1; int middle = (left + right) / 2; if(nums[middle] == target) return middle; else if(nums[middle] > target) { return BinarySearch(nums,left,middle - 1,target); } else { return BinarySearch(nums,middle + 1,right,target); } } int SearchRotate(vector<int>& nums,int left,int right,int target) //在回旋数组中查找目标元素 { if(left > right) return -1; int middle = (left + right) / 2; if(nums[middle] == target) return middle; else if(nums[middle] < nums[right]) { if((target > nums[middle]) && (target <= nums[right]) ) { return BinarySearch(nums,middle + 1,right,target); } else { return SearchRotate(nums,left,middle - 1,target); } } else { if((target >= nums[left]) && (target < nums[middle]) ) { return BinarySearch(nums,left,middle - 1,target); } else { return SearchRotate(nums,middle + 1,right,target); } } } };
0 0
- leetcode挨个儿刷150515(10):Search in Rotated Sorted Array
- [leetcode][search] Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array
- LeetCode: Search in Rotated Sorted Array II
- LeetCode Search in Rotated Sorted Array
- LeetCode Search in Rotated Sorted Array II
- [Leetcode] Search in Rotated Sorted Array
- LeetCode : Search in Rotated Sorted Array
- LeetCode : Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array II
- [LeetCode] Search in Rotated Sorted Array
- [Leetcode] Search in a Rotated Sorted Array
- [Leetcode] Search in Rotated Sorted Array II
- leetcode 97: Search in Rotated Sorted Array
- [LeetCode] Search in Rotated Sorted Array
- [leetcode] Search in Rotated Sorted Array
- [leetcode] Search in Rotated Sorted Array II
- Leetcode Search in Rotated Sorted Array
- echarts 实例 (二:调用时,渲染)
- Emeditor宏编译java文件并执行
- Duilib ListContain 扩展
- Android中判断app何时启动和关闭的技术研究
- (ORACLE 11g)"未在本地计算机注册“OraOLEDB.Oracle.1”提供程序"问题解决
- leetcode挨个儿刷150515(10):Search in Rotated Sorted Array
- mysql基础命令(一)
- 做精确计算时应避免使用float和double
- c++基础i
- centos 6.5下搭建ipsec/xl2tpd VPN
- 一些记录
- jquery插件基本配置
- 怎样新建class类和新建带有ViewController的xib文件
- 关于设置navigationBar高度的问题