2023.5.21
题目描述:
这道题简单很多了,个人想了两种解法,一种暴力解,一种二分法。直接上代码:
解法一:暴力解
// 暴力解
class Solution {
public:
int search(vector<int>& nums, int target)
{
int n = nums.size();
for(int i=0;i<n;i++)
{
if(nums[i] == target)
{
return i;
}
}
return -1;
}
};
解法二:二分法,时间复杂度为O(log n)
// 二分法
class Solution {
public:
int search(vector<int>& nums, int target)
{
int n = nums.size();
int i = 0;
int j = n-1;
while(i <= j)
{
int k = (i+j)/2;
if(nums[k] < target)
{
i = k+1;
}
else if(nums[k] > target)
{
j = k-1;
}
else
{
return k;
}
}
return -1;
}
};
二分法的话要注意while循环括号里的条件是>还是>= ,我一开始写的是>,就出问题了,那样子如果数组只有一个元素的话,那个元素判断不到。总之验算的时候多用几个特例验证一下。