美文网首页
力扣33搜索旋转排序数组

力扣33搜索旋转排序数组

作者: 花生酱_3203 | 来源:发表于2019-05-15 15:42 被阅读0次

题目:假设按照升序排序的数组在预先未知的某个点上进行了旋转。

( 例如,数组[0,1,2,4,5,6,7]可能变为[4,5,6,7,0,1,2])。

搜索一个给定的目标值,如果数组中存在这个目标值,则返回它的索引,否则返回-1。

你可以假设数组中不存在重复的元素。

你的算法时间复杂度必须是O(logn) 级别。

本来一看非常简单 ,往下看下去发现头疼的是最后一句话 ,思路是不停对折数组 将目标数分别于对折后的2个数组的最大最小中间值进行比较 锁定目标位置

int num =0;

int size = nums.length -1;

if (num == size) {

if (nums[0] == target) {return 0; }

else {

return -1;

    }

}

while (size > num) {

int midnum = (num + size) /2;

    if (nums[midnum] == target)return midnum;

    if (nums[num] == target)return num;

    if (nums[size] == target)return size;

    if (nums[num] < nums[midnum]) {

if (nums[num] < target && target < nums[midnum]) {

size = midnum -1;

        }else {

num = midnum +1;

        }

}else {

if (nums[midnum] < target && target < nums[size]) {

num = midnum +1;

        }else {

size = midnum -1;

        }

}

}

return -1;

相关文章

网友评论

      本文标题:力扣33搜索旋转排序数组

      本文链接:https://www.haomeiwen.com/subject/yggpaqtx.html