插入位置

时间:2022-06-08
本文章向大家介绍插入位置,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

给定一个排序数组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;

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,则说明还未找到正确位置,持续二分搜索
            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;
    }
};