Leetcode Search in Rotated Sorted Array I && II

来源:互联网 发布:阿里云lamp一键安装包 编辑:程序博客网 时间:2024/05/16 14:46

二分查找变形。比较时判断target是处于是否处于有序的那一段,判断是否处于有序的方法是:比较A[mid]和A[low]或者A[high]的大小。

如果有重复的元素,那么还要在比较前对数组进行处理,如果A[mid]==A[low]则low++,直到不等。

Search in Rotated Sorted Array I:

class Solution {public:    int search(int A[], int n, int target) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.        int low = 0, high = n-1;        int mid;        while(low <= high){            mid = (low+high)/2;            if(A[mid] == target)                return mid;            else if(A[low] > A[mid]){                if(target > A[mid] && target < A[low])                    low = mid+1;                else high = mid-1;            }            else if(A[mid] > A[high]){                if(target > A[high] && target < A[mid])                    high = mid-1;                else low = mid+1;            }            else{                if(A[mid] > target){                    high = mid-1;                }                else if(A[mid] < target){                    low = mid+1;                }                //else return mid;            }        }        return -1;    }};

Search in Rotated Sorted Array II:
class Solution {public:    bool search(int A[], int n, int target) {        // IMPORTANT: Please reset any member data you declared, as        // the same Solution instance will be reused for each test case.        int low = 0, high = n-1;        int mid;        while(low <= high){            mid = (low+high)/2;            if(A[mid] == target)                return true;            else if(A[mid] == A[low]){                low++;            }            else if(A[low] > A[mid]){                if(target > A[mid] && target < A[low])                    low = mid+1;                else high = mid-1;            }            else if(A[mid] > A[high]){                if(target > A[high] && target < A[mid])                    high = mid-1;                else low = mid+1;            }            else{                if(A[mid] > target){                    high = mid-1;                }                else if(A[mid] < target){                    low = mid+1;                }                //else return mid;            }        }        return false;    }};


原创粉丝点击