給定一個排序數(shù)組nums(無重復元素)與目標值target,如果target在nums里 出現(xiàn)凭语,則返回target所在下標蛾绎,如果target在nums里未出現(xiàn),則返回target應該 插入位置的數(shù)組下標撞反,使得將target插入數(shù)組nums后妥色,數(shù)組仍有序。
LeetCode 35. Search Insert Position
算法設(shè)計
設(shè)元素所在的位置(或最終需要插入的位置)為index遏片,
在二分查找的過程中嘹害,index的更新方法:
如果target == nums[mid]:index = mid;
如果target < nums[mid],且 (mid == 0或 target > nums[mid-1]):
index = mid;
如果target > nums[mid]吮便,且 (mid == nums.size() – 1 或 target < nums[mid+1]):
index = mid + 1;
class Solution{
public:
int searchInsert(std::vector<int> &nums, int target){
int index = -1;//最終返回的下標笔呀,否則為需要插入的位置;
int begin = 0;
int end = noms.size() -1;
while( index == -1){//若index == -1髓需,則說明還未找到正確位置许师,持續(xù)二分搜索
int mid == (begin + end) / 2;
if(target ==nums[mid]){
index = mid;
}
else if(target < nums[mid]){
if(mid == 0 || target > nums[mid-1]){
index = mid;
}
end = mid -1;
}
else if(target > nums[mid] || mid == nums.size()-1){
if(target < nums[mid+1]){
return index = mid+1;
}
begin = mid +1 ;
}
}
return index;
}
};