第一次用暴力法写出来的程序再用时击败了96.1%的用户,同时在内存击败了98.15%的用户,不过可能主要原因是这是一道考察二分法的题目。(突然发现相同代码多次提交,执行用时会发生变化...震惊)
题目要求,给出一个排序数组和一个目标值,若在数组中能找到目标值,则返回该目标值在数组中的下标,若数组中不存在该目标值,则返回该目标值在数组中应该插入的位置。自己写的时候用了flag和暴力法,代码如下:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int flag = 0;//设置旗帜,用于提醒当目标值比数组中所有数都大的情况
for(int i = 0; i < nums.size(); i++)//循环次数为数组长度
{
if(nums[i] >= target) return i; //在数组中找到位置,并返回下标
else
{
flag = 1;
}
}
if(flag == 0) return NULL;
else return nums.size(); //返回数组最后一个下标的后一个下标
}
};
下面用二分法再做一次,代码如下:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int l = 0, r = nums.size() -1;
while(l <= r)
{
int mid = l+(r-l)/2;
if(nums[mid]>target) r = mid - 1;
else if(nums[mid]<target) l = mid + 1;
else return mid;
}
return r + 1;
}
};