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

來源:互聯網
上載者:User

標籤:c   c++   java   python   leetcode   

Problem:

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.

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+=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,C++,Java,Python)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.