搜索插入位置
思路(实现代码)
int searchInsert(int* nums, int numsSize, int target){ int left = 0; int right = numsSize - 1; while(left <= right) { int mid = (right - left) / 2 + left; //为防止right + left发生整型溢出,故用此方法计算 if(nums[mid] < target) left = mid + 1; else if(nums[mid] > target) right = mid - 1; else return mid; } return left; }
- 为什么就是直接插入在left位置呢,想了很久,感觉还是举例子画图更容易理解。
- 首先我们需要明确,若已知数组中不存在目标元素target,那么进行最后一次while循环时,left必定等于right(如下图)
- 通过图形的分析,我们确实可以确定若·targett不存在,那么left就是要插入的下标位置
PS:笔者对这题的思路可能也不是太准确,欢迎大家的斧正。