分析:
首先看到这题的第一印象是题目很长,感觉很复杂,但仔细看下来之后发现题目中间一段对解题没有任何的帮助,重点在最后一句,大概意思就是在目标数组中找到目标数据,并传出对应位置,否则传出-1
清楚了目的,由此想到了第一种解法:即直接循环数组,与目标数据匹配。顺利通过测试。
int search(vector<int>& nums, int target)
{
int temp=0,flag=-1; //flag用来记录是否找到目标数据,temp用来记录位置
for(auto i:nums) //循环寻找目标数字
{
temp++; //位置偏移
if(i==target)
{
flag=temp; //记录位置
}
}
if(flag!=-1)
{
return flag-1;
}
else
{
return -1;
}
}
解法二:二分查找,察觉到使用此方法的一个重要因素就是题目首句数组按升序排列,但是此题对普通的二分查找做了一些变化,是在题目的中间段落,对数组进行了旋转,那么为了解决这一旋转有两种解法,一种是直接将旋转之后的数组,再次旋转回来;另一种,是在开始对目标值所在数组左右哪个部分进行判断,然后对这部分进行二分查找。
在这里插入代码片