🌱博主简介:大一计科生,努力学习Java中!热爱写博客~预备程序媛
📜所属专栏:LeetCode每日一题–进击大厂
✈往期博文回顾: 【Leetcode每日一题】35.搜素插入位置|二分查找数组下标
🕵️♂️近期目标:成为千粉小博主。
🌺“再牛的程序员也是从小白开始,既然开始了,就全身心投入去学习技术”
34. 在排序数组中查找元素的第一个和最后一个位置
🙋♀️根据我自己的理解画的图:
class Solution {public int[] searchRange(int[] nums, int target) {int len=nums.length;if(len==0){return new int[]{-1,-1};//数组长度为0}int firstPosition = findFisrtPosition(nums,target);if(firstPosition==-1){return new int[]{-1,-1};}int lastPosition = findLastPosition(nums,target);return new int[]{firstPosition,lastPosition};}private int findFisrtPosition(int[] nums,int target){int left=0;int right=nums.length-1;while(leftint mid=left+(right-left)/2;//防止溢出if(nums[mid]>=target){right=mid;//下一轮搜索区间为[left,mid]}else{left=mid+1;}}if(nums[left]!=target){//目标元素不在数组中return -1;}return right;}private int findLastPosition(int[] nums,int target){int left=0;int right=nums.length-1;while(leftint mid=left+(right-left+1)/2;//防止溢出if(nums[mid]<=target){left=mid;//下一轮搜索区间为[mid,right]}else{right=mid-1;}} return left;}
}
mid = left+(right-left+1)/2
中的+1
是不能省的!目的还是当只剩两个元素时,mid指针指向的是后一个元素,按照[left,mid-1]、[mid,right]
来分才有可能缩小区间。(避免死循环的关键)
- 🙇♀️建立此专栏的初衷是为了监督自己每天认真刷一个题,积少成多。并把自己每次刷题的思路、收获以博文的形式分享出来,帮助更多人,以及方便后续复习。如果有兴趣的同学可以订阅此专栏,我们一起刷题,一起交流,进步和学习!专栏:LeetCode每日一题–进击大厂