leetcode:Search in Rotated Sorted Array

题目详述:

      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.

         以前总喜欢在IDE里做这种题目,然后自己创建例子测试,现在看来的确是很可笑的行为,现在开始在IDE上面答题了,这道题是第一道,希望可以陆陆续续的全部解决掉,本科不是学的计算机,现在想要准备一下计算机方向的工作,深知基础匮乏,但好在亡羊补牢 为时未晚。

          记录一下自己的解题思路。

          这道题要从一个看似有序的数组里面找出要找的数字,如果用传统的二分法来做不是不可,只是在处理边界时会出现问题,毕竟此题不是真的sorted array,我的思路是 避重就轻,只处理有序的部分,这基于这样一个观察结果,A[first]到A[mid]到A[last]这两个区间里面必定有一个是有序的,另一个是无序的,先判断前后两部分哪一块是有序的,然后处理有序的这一块,如果要找的target在有序的里面那我就很容易的进行边界处理,如果不在里面那肯定就在无序的那一块了,这样我还是可以将数组的规模进一步缩小。然后在新的数组上再在有序的那一块进行这样的处理,直到最后找到target。

            我遇到的问题有两个,一个是:time limit exceeded 原因是我忘记了return -1,另一个是我没有处理好数组只有两个元素时的情况, while(first<=last)以及if(A[first]<=A[mid])里面的等号我忘了,这样就不允许first和mid指向相同的元素了(两个元素的有序部分只有一个元素),前面进不去,后面就进去了,last减一,最后不满足while循环条件退出了。

class Solution {
public:
    int search(int A[], int n, int target) {
        int first=0,last=n-1,mid=0;
        while(first<=last){
                mid=(first+last)/2;
                if(A[mid]==target) return mid;
                
                if(A[first]<=A[mid])
                   { if(A[first]<=target&&A[mid]>target) last=mid-1;
                    else first=mid+1;}
                else{if(A[mid]<target&&A[last]>=target) first=mid+1;
                     else last=mid-1; }
        
        } return -1;
    }};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值