LC 搜索插入位置
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
示例 2:
输入: [1,3,5,6], 2
输出: 1
示例 3:
输入: [1,3,5,6], 7
输出: 4
示例 4:
输入: [1,3,5,6], 0
输出: 0
自己想的题解:完全是暴力求解
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int result = -1;
//正常查找到的情况
for (int i = 0; i < nums.size(); i++)
{
if (target == nums[i])
{
result = i;
break;
}
}
//没有查找到的情况
if (result == -1)
{
for (int i = 0; i < nums.size(); i++)
{
if (nums[i] > target)
{
result = i;
break;
}
}
//target值比数组中所有值都要大的情况
if (result == -1)
{
result = nums.size();
}
}
return result;
}
};
时间复杂度:O(N)
空间复杂度:O(1)
运行情况如下:(太菜了我)
使用二分查找:
//二分查找法
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int Left = 0;//数组最左端索引
int Right = nums.size() - 1;//数组最右端索引
int mid = 0;
while (Left <= Right)
{
//mid = (Left + Right) / 2;
//可以防止数组上溢出
mid = Left + (Right - Left)/2;
if (nums[mid] == target)
{
return mid;
}
else if (target > nums[mid])
{
Left = mid + 1;
}
else
{
Right = mid - 1;
}
}
return Left;
}
};
时间复杂度:O(logN)
空间复杂度:O(N)
运行情况: