分析:就是找到第一個大於或等於給出數字的位置。
代碼一,直接按照這個邏輯實現:
class Solution {
public:
int searchInsert(vector<int>& nums, int target) {
int i;
for(i=0;i<nums.size();i++)
{
if(nums[i]>=target)
return i;
}
return i;
}
};//Runtime: 8 ms, Memory Usage: 8.9 MB
但是當數據一大,這個代碼的效率就很低,因爲時間複雜度是O(N),另一個思路就是二分查找。
代碼二,二分查找實現,時間複雜度O(log2N):
class Solution
{
public:
int searchInsert(vector<int>& v, int target)
{
int low=0,up=v.size()-1,mid;
if(v[up]<target) return up+1;
while(low<up)
{
mid=low+(up-low)/2;
if(v[mid]==target)
return mid;
else if(v[mid]<target)
low=mid+1;
else
up=mid;
}
return up;
}
};//Runtime: 8 ms, Memory Usage: 9 MB
這裏兩個代碼的運行時間和佔用內存看起來好像差不多,應該是測試數據不夠大吧,所以纔沒有體現出很大的差別。
性能肯定是二分會比較好的。