LeetCode 33 Search in Rotated Sorted Array (C,C++,Java,Pytho

Problem:

Suppose a sorted array is rotated at some pivot unknown to you beforehand.

(i.e.,0 1 2 4 5 6 7might become4 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的大小判断应该在哪个范围内进行二分查找。

题目大意:

给一个排好序的数组,但是被翻转过了,就是前边的一部分被接到了数组后边,现在给一个目标值,,要求得到该值在数组中的下标,没有输出-1

Java源代码(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+=1if 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=endwhile l<=r:mid=(l+r)/2if nums[mid]==target:return midelif target>nums[mid]:l=mid+1else:r=mid-1return -1

你要以乐观的态度看待这个世界,你会发现世界是如此得美好

LeetCode 33 Search in Rotated Sorted Array (C,C++,Java,Pytho

相关文章:

你感兴趣的文章:

标签云: