首页 > 代码库 > LeetCode: Search Insert Position [034]
LeetCode: Search Insert Position [034]
【题目】
Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it were inserted in order.
You may assume no duplicates in the array.
Here are few examples.[1,3,5,6]
, 5 → 2[1,3,5,6]
, 2 → 1[1,3,5,6]
, 7 → 4[1,3,5,6]
, 0 → 0
【题意】
给定一个有序的数组和目标值,如果数组中有target值,则返回索引位,如果没有target值,则返回该值应该插入的位置。数组中没有重复元素。
【思路】
二分查找。注意!为了确定插入位置,二分查找的循环条件不能是low<=high, 而因为改为low+1<high需要考虑以下几种特殊情况:
1. A数组为空
2. A数组只有一个元素
3. target与首尾元素的比较
【代码】
class Solution { public: int searchInsert(int A[], int n, int target) { //A数组为空 if(n==0)return 0; //target与首尾元素的比较 if(target<A[0])return 0; else if(target>A[n-1])return n; //A数组只有一个元素 if(n==1 && target==A[0])return 0; int low=0, high=n-1; while(low+1<high){ int mid=(low+high)/2; if(A[mid]==target)return mid; else if(target<A[mid]) high=mid; //注意mid不能排除,否则插入范围就无法确定,因此是mid,而不是常规的mid-1 else low=mid; //同high } if(A[low]==target)return low; else return high; } };
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。