插入位置

给定一个排序数组nums(无重复元素)与目标值target,如果target在nums里 出现,则返回target所在下标,如果target在nums里未出现,则返回target应该 插入位置的数组下标,使得将target插入数组nums后,数组仍有序。
LeetCode 35. Search Insert Position

算法设计

设元素所在的位置(或最终需要插入的位置)为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;


插入位置_第1张图片
class Solution{
public:
    int searchInsert(std::vector &nums, int target){
        int index = -1;//最终返回的下标,否则为需要插入的位置;
        int begin = 0;
        int end = noms.size() -1;
        while( index == -1){//若index == -1,则说明还未找到正确位置,持续二分搜索
            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;
    }
};

你可能感兴趣的:(插入位置)