题目35:搜索插入位置
实现代码如下,使用二分查找法完成。
int searchInsert(int* nums, int numsSize, int target) {
    int left = 0, right = numsSize - 1, ans = numsSize;
    while (left <= right) {
        int mid = ((right - left) >> 1) + left;
        if (target <= nums[mid]) {
            ans = mid;
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }
    return ans;
}
值得关注的代码语句为
int mid = ((right - left) >> 1) + left;
int 型数据的取值范围,有最大值 MAX 和最小值 MIN;left 和 right 满足范围;但是 left + right 不一定小于 MAX 有可能导致数值溢出。
所以先将上述代码改写为
int mid = ((right + left)/2;
避免数值溢出, 然后由于位运算更加快速,使用右移一位操作代替数据的除以2操作
int mid = ((right - left) >> 1) + left;
                 
                   
                   
                   
                   博客讨论了在实现二分查找算法时如何避免整数溢出的问题。通过将 `(right + left) / 2` 改写为 `(right - left) >> 1` 加上 `left`,可以有效地防止数值溢出,同时保持代码的效率。这个优化对于大型数组的搜索插入位置问题尤其重要。
博客讨论了在实现二分查找算法时如何避免整数溢出的问题。通过将 `(right + left) / 2` 改写为 `(right - left) >> 1` 加上 `left`,可以有效地防止数值溢出,同时保持代码的效率。这个优化对于大型数组的搜索插入位置问题尤其重要。
          
 
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
                     
              
             
                   675
					675
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
					 
					 
					


 
            