问题入口
二分搜索
时间复杂度O(logn)
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int start = 0;
int end = nums.size() - 1;
while (start <= end)
{
int mid = (start + end) / 2;
if (nums[mid] == target)
{
return mid;
}
else if(nums[mid] > target)
{
end = mid - 1;
}
else if(nums[mid] < target)
{
start = mid + 1;
}
}
return start;
}
};
由于给到的数组是从小到大的,可以使用二分搜索法,即以中间的元素为界,如果大于中间元素,范围限定在右半边,如果小于中间元素,范围限定在左半边。假设数组元素数为n,范围依次是。假设通过k次找到指定元素, 。时间复杂度为O(logn)
时间复杂度O(n)
class Solution {
public:
//O(n)
int searchInsert(vector<int>& nums, int target) {
for (int i = 0; i < nums.size(); i++)
{
if (nums[i] == target)
return i;
else
{
if (nums[i] > target)
return i;
else
continue;
}
}
return nums.size();
}
};