欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

LeetCode34.在排序数组中查找元素的第一个和最后一个位置

时间:2023-06-30
基本思想:

有序递增重复序列边界二分查找,详见二分总结博客;

详细代码:

int left_bound(vector&nums,int target){ int l=0; int r=nums.size()-1; while(l<=r){ int mid=l+(r-l)/2; if(nums[mid]==target){ r=mid-1; }else if(nums[mid]>target){ r=mid-1; }else{ l=mid+1; } } if(l==nums.size()||nums[l]!=target) return -1; return l;}int right_bound(vector&nums,int target){ int l=0; int r=nums.size()-1; while(l<=r){ int mid=l+(r-l)/2; if(nums[mid]==target){ l=mid+1; }else if(nums[mid]>target){ r=mid-1; }else{ l=mid+1; } } if(r==-1||nums[r]!=target) return -1; return r;}vector searchRange(vector& nums, int target) { if(nums.size()<1) return vector{-1,-1}; if(nums.size()==1) if(target==nums[0]) return vector{0,0}; else return vector{-1,-1}; int l= left_bound(nums,target); int r= right_bound(nums,target); return vector{l,r};}

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。