微信手机客户端网站建设,中国国际贸易网站,建设银行网站 查余额,梁山网站建设我们知道使用二分查找能找到值所在的位置。假如我们在找到值后仍然不断的更新指针会发生什么#xff1f;我们可以利用这一点来找到最左边的以及最右边的值。 如果当nums[mid]target时#xff0c;使得 rightmid-1#xff0c;那么最终会使得target在right的右边。 如果当nums[… 我们知道使用二分查找能找到值所在的位置。假如我们在找到值后仍然不断的更新指针会发生什么我们可以利用这一点来找到最左边的以及最右边的值。 如果当nums[mid]target时使得 rightmid-1那么最终会使得target在right的右边。 如果当nums[mid]target时使得 leftmid1那么最终会使得target在left的左边。 原因是因为我们会不断更新left和right即使是找到了值仍然更新。当我们找到一个目标值使得 rightmid-1实际上我们是将target值认为比target值大的然后又要寻找target值。最后left不断逼近targetright不断往左去掉target。 class Solution {
public:vectorint searchRange(vectorint nums, int target) {if(nums.empty()) return {-1,-1};//除了forward_list外所有容器都有的三个大小操作size()empty()max_size()。返回值 是 列表初始化的int left0,rightnums.size()-1;while(leftright){//寻找最左边的元素int mid(leftright)1;if(nums[mid]target) rightmid-1;else leftmid1;}if(leftnums.size()||nums[left]!target) return vectorint{-1,-1};//列表初始化的匿名对象int ansleft;left0,rightnums.size()-1;while(leftright){//寻找最右边的元素int mid(leftright)1;if(nums[mid]target) rightmid-1;else leftmid1;}return {ans,left-1};//列表初始化的匿名对象涉及到一个类类型的 隐式类型转换}
}; 涉及到的STL问题已经标注。