第一题:
class Solution { public: int search(vector& nums, int target) { int left = 0, right = nums.size() - 1; while(left target) { right = mid - 1; } else { left = mid + 1; } } return -1; } };
第一题没什么细节,用笔在纸上画一下模拟一下即可
第二题:
这一道题相对其他题比较抽象,具体体现在其最后一个位置不好找,因为在编译的时候,计算mid时系统会自动向下取整,因此在处理左端点时可以向下取整得到,处理又端点时需要向上取整,同时要注意数据的溢出,这里是如何处理的。
class Solution { public: vector searchRange(vector& nums, int target) { if (nums.size() == 0) return{ -1,-1 }; int begin = 0; int left = 0, right = nums.size() - 1, mid; while (left 的目的是,使得right所指向的目标元素为最后的位置。第三题:
class Solution { public: int searchInsert(vector& nums, int target) { int n = nums.size(); int l=0,r=n-1; while(l arr[i + 1]) return i; // 为了处理 oj 需要控制所有路径都有返回值 return -1; } }