搜索旋转排序数组--力扣

Posted 穿迷彩服的鲨鱼

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搜索旋转排序数组--力扣相关的知识,希望对你有一定的参考价值。


前言

整数数组 nums 按升序排列,数组中的值 互不相同 。
在传递给函数之前,nums 在预先未知的某个下标 k(0 <= k < nums.length)上进行了 旋转,使数组变为 [nums[k], nums[k+1], …, nums[n-1], nums[0], nums[1], …, nums[k-1]](下标 从 0 开始 计数)。例如, [0,1,2,4,5,6,7] 在下标 3 处经旋转后可能变为 [4,5,6,7,0,1,2] 。
给你 旋转后 的数组 nums 和一个整数 target ,如果 nums 中存在这个目标值 target ,则返回它的下标,否则返回 -1 。


一、搜索旋转排序数组

1.不知道为啥,我只写了这个就通过了提交

代码如下(示例):

int search(vector<int>& nums, int target)
{
	for (int i = 0; i < nums.size(); i++)
	{
		if (target==nums[i])
		{
			return i;
		}
	}
	return -1;		
}

2.官方解答

代码如下(示例):二分查找

int search(vector<int>& nums, int target)
{
	int len = nums.size();
	if (!len)
	{
		return -1;
	}
	if (len==1)
	{
		return target == nums[0] ? 0 : -1;
	}

	int l = 0, r = len - 1;
	while (l<r)
	{
		int mid = (l + r) / 2;
		if (nums[mid]==target)
		{
			return mid;
		}
		if (nums[0]<=nums[mid])
		{
			if (nums[0]<=target&&target<nums[mid])
			{
				r = mid - 1;
			}
			else
			{
				l = mid + 1;
			}
		}
		else//[7,8,0,1,2,3,4,5,6]
		{
			if (nums[mid]<target&&target<=nums[len-1])
			{
				l = mid + 1;
			}
			else
			{
				r = mid - 1;
			}
		}
	}
	return -1;
}

二、测试代码

#include<iostream>
#include<vector>
using namespace std;

int search(vector<int>& nums, int target)
{
	/*for (int i = 0; i < nums.size(); i++)
	{
		if (target==nums[i])
		{
			return i;
		}
	}
	return -1;*/
	int len = nums.size();
	if (!len)
	{
		return -1;
	}
	if (len==1)
	{
		return target == nums[0] ? 0 : -1;
	}

	int l = 0, r = len - 1;
	while (l<r)
	{
		int mid = (l + r) / 2;
		if (nums[mid]==target)
		{
			return mid;
		}
		if (nums[0]<=nums[mid])
		{
			if (nums[0]<=target&&target<nums[mid])
			{
				r = mid - 1;
			}
			else
			{
				l = mid + 1;
			}
		}
		else//[7,8,0,1,2,3,4,5,6]
		{
			if (nums[mid]<target&&target<=nums[len-1])
			{
				l = mid + 1;
			}
			else
			{
				r = mid - 1;
			}
		}
	}
	return -1;
}

int main()
{
	vector<int> nums = { 4,5,6,7,0,1,2 };
	int target = 0;
	cout << search(nums, target);

	return 0;
}

总结

在这里插入图片描述

以上是关于搜索旋转排序数组--力扣的主要内容,如果未能解决你的问题,请参考以下文章

力扣 33. 搜索旋转排序数组 [二分]

力扣 33. 搜索旋转排序数组 [二分]

力扣 33. 搜索旋转排序数组 [二分]

LeetCode(力扣)——Search in Rotated Sorted Array 搜索旋转排序数组 python实现

力扣每日一题——NO.33——搜索旋转排序数组

力扣每日一题——NO.33——搜索旋转排序数组