LeetCode 33 Search in Rotated Sorted Array (C,C++,Java,Python)
2015-05-14 19:59
716 查看
Problem:
Suppose a sorted array is rotated at some pivot unknown to you beforehand.(i.e.,
0 1 2 4 5 6 7might 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.
Solution:
本题是二分查找的变形题,主要就是找到翻转的那个临界点(下一个数值比它小)就可以了,然后看target的大小判断应该在哪个范围内进行二分查找。题目大意:
给一个排好序的数组,但是被翻转过了,就是前边的一部分被接到了数组后边,现在给一个目标值,要求得到该值在数组中的下标,没有输出-1Java源代码(329ms):
public class Solution { public int search(int[] nums, int target) { int index=0,len=nums.length; while(index<len-1 && nums[index]<=nums[index+1])index++; if(target>=nums[0] && target<=nums[index]){ return find(nums,0,index,target); }else{ return find(nums,index+1,len-1,target); } } private int find(int[] nums,int start,int end,int target){ if(start>end)return -1; int l=start,r=end,mid; while(l<=r){ mid=(l+r)/2; if(nums[mid]==target)return mid; else if(target<nums[mid])r=mid-1; else l=mid+1; } return -1; } }
C语言源代码(3ms):
int find(int* nums,int start,int end,int target){ int l=start,r=end,mid; if(start>end)return -1; while(l<=r){ mid=(l+r)>>1; if(nums[mid]==target)return mid; else if(nums[mid]>target)r=mid-1; else l=mid+1; } return -1; } int search(int* nums, int numsSize, int target) { int index=0; while(index<numsSize-1 && nums[index]<=nums[index+1])index++; if(target >= nums[0] && target<=nums[index]){ return find(nums,0,index,target); }else{ return find(nums,index+1,numsSize-1,target); } }
C++源代码(6ms):
class Solution { public: int search(vector<int>& nums, int target) { int index=0,len=nums.size(); while(index<len-1 && nums[index]<=nums[index+1])index++; if(target>=nums[0] && target<=nums[index]){ return find(nums,0,index,target); }else{ return find(nums,index+1,len-1,target); } } private: int find(vector<int>& nums,int start,int end,int target){ if(start>end)return -1; int l=start,r=end,mid; while(l<=r){ mid=(l+r)>>1; if(nums[mid]==target)return mid; else if(nums[mid]>target)r=mid-1; else l=mid+1; } return -1; } };
Python源代码(64ms):
class Solution: # @param {integer[]} nums # @param {integer} target # @return {integer} def search(self, nums, target): index=0;length=len(nums) while index<length-1 and nums[index]<nums[index+1]:index+=1 if target>=nums[0] and target<=nums[index]:return self.find(nums,0,index,target) else:return self.find(nums,index+1,length-1,target) def find(self,nums,start,end,target): if start>end:return -1; l=start;r=end while l<=r: mid=(l+r)/2 if nums[mid]==target:return mid elif target>nums[mid]:l=mid+1 else:r=mid-1 return -1
相关文章推荐
- LeetCode 33 — Search in Rotated Sorted Array(C++ Java Python)
- 33.search in rotated sorted array leetcode java
- Java [leetcode 33]Search in Rotated Sorted Array
- 33. Search in Rotated Sorted Array leetcode python 2016 new season
- 【LEETCODE】33-Search in Rotated Sorted Array [Python]
- leetcode 33. Search in Rotated Sorted Array __java
- Leetcode 33. Search in Rotated Sorted Array (Hard) (java)
- 【leetcode】33. Search in Rotated Sorted Array【java】
- (Java)LeetCode-33. Search in Rotated Sorted Array
- [leetcode]33. Search in Rotated Sorted Array(Java实现)
- python写算法题:leetcode: Add to List 33. Search in Rotated Sorted Array
- LeetCode 33. Search in Rotated Sorted Array(在旋转有序序列中搜索)
- leetcode(33). Search in Rotated Sorted Array
- LeetCode - 33/81/153/154 - Search in Rotated Sorted Array
- LeetCode(33)--Search in Rotated Sorted Array
- Leetcode[33]-Search in Rotated Sorted Array
- Search in Rotated Sorted Array leetcode java
- Search in Rotated Sorted Array II leetcode java
- [leetcode] 33.Search in Rotated Sorted Array
- LeetCode 33: Search in Rotated Sorted Array