34. 在排序数组中查找元素的第一个和最后一个位置—心得和解法

这篇博客探讨了如何利用二分法和双指针策略解决LeetCode上的一个问题:在排序数组中查找目标元素的第一个和最后一个位置。二分法通过不断缩小搜索范围找到目标元素,而双指针法则通过同时从数组两端逼近目标。这两种方法都有效地减少了时间复杂度,为解决此类问题提供了高效解决方案。
摘要由CSDN通过智能技术生成

在这里插入图片描述
题目链接: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};
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值