题目链接:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/comments/
二分法:
class Solution {
//排序好的数组,第一反应,二分或者双指针
//二分做法:注意一点,二分最后的的结果是让left为我们想要的数
//时刻注意:数组容易超界
public int[] searchRange(int[] nums, int target) {
//定义左右指针
int left=0,right=nums.length-1;
//定义两个返回值
int num1=-1,num2=-1;
//1.while(left<right)
while(left<right){
//定义mid(中间数)等于left+right
int mid=(left+right)/2;
//如果中间数大于我们要的
if(nums[mid]>=target)right=mid;
//如果中间数小于我们要的
else left=mid+1;
//1.
}
//2.如果left是我们要的数 当前left赋值给我们的返回值
if(left<nums.length&&nums[left]==target){
num1=left;
//while:如果left是nums.length||[++left]!=target 将left-1返回的
while(left!=nums.length-1&&nums[left+1]==target)left++;
num2=left;
//2.
}
//返回
return new int[]{num1,num2};
}
}
双指针法:
class Solution {
//双指针法
public int[] searchRange(int[] nums, int target) {
//定义双指针
int left=0,right=nums.length-1;
//1.while left<right
while(left<=right){
//如果同时等于 ,break
if(nums[left]==target&&nums[right]==target) {
return new int[]{left,right};
}
//如果左面小于 left++
if(nums[left]<target)left++;
//右面大于 right——
if(nums[right]>target)right--;
//1.
}
//返回两个结果
return new int[]{-1,-1};
}
}