(java)(leecode)34. 在排序数组中查找元素的第一个和最后一个位置

Src:https://leetcode-cn.com/problems/find-first-and-last-position-of-element-in-sorted-array/

class Solution {
    public int[] searchRange(int[] nums, int target) {
        int ans[]=new int[2];
        ans[0]=-1;
        ans[1]=-1;
        if(nums.length==0){
            return ans;
        }
        int f=0,t=nums.length-1;
        int m=(f+t)/2;
        int start=-1,end=-1;
        while(f<=t){
            if(nums[m]>target){
                t=m-1;
                m=(f+t)/2;
            }
            else if(nums[m]<target){
                f=m+1;
                m=(f+t)/2;
            }
            if(nums[m]==target){
                   f=m;
                   t=m;
                   start=m;
                   end=m;
                   while(f-1>=0){
                       if(nums[f-1]!=target){
                           start=f;
                           break;
                       }
                       else{
                           start=f-1;
                       }
                       f--;
                   }
                    while(t+1<nums.length){
                        if(nums[t+1]!=target){
                            end=t;
                            break;
                        }
                        else{
                            end=t+1;
                        }
                        t++;
                    }
                    break;
            }
        }
        ans[0]=start;
        ans[1]=end;
        return ans;
    }
}
Java数组是一种用于存储多个相同类型元素的数据结构。它可以存储基本数据类型(如int、float等)或者引用类型(如String、对象等)。数组在内存中是连续存储的,通过索引可以访问修改数组中的元素。 二分法是一种高效的查找算法,适用于已排序数组。它通过将数组分成两部分,然后判断目标元素在哪一部分中,从而缩小查找范围。具体步骤如下: 1. 确定数组的起始索引start结束索引end。 2. 计算中间索引mid,即mid = (start + end) / 2。 3. 比较中间索引对应的元素与目标元素的大小关系: - 如果中间元素等于目标元素,则到了目标元素,返回中间索引。 - 如果中间元素大于目标元素,则目标元素在左半部分,更新结束索引为mid - 1。 - 如果中间元素小于目标元素,则目标元素在右半部分,更新起始索引为mid + 1。 4. 重复步骤2步骤3,直到到目标元素或者起始索引大于结束索引。 对于给定的数组[0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],我们可以使用二分法查找第一个1的索引。具体步骤如下: 1. 起始索引start为0,结束索引end为13。 2. 计算中间索引mid,即mid = (0 + 13) / 2 = 6。 3. 比较中间索引对应的元素与目标元素1的大小关系: - 中间元素1等于目标元素1,但我们要的是第一个1,所以更新结束索引为mid。 4. 重复步骤2步骤3,直到到目标元素或者起始索引大于结束索引。 5. 继续二分查找,此时起始索引start为0,结束索引end为6。 6. 计算中间索引mid,即mid = (0 + 6) / 2 = 3。 7. 比较中间索引对应的元素与目标元素1的大小关系: - 中间元素0小于目标元素1,更新起始索引为mid + 1。 8. 继续二分查找,此时起始索引start为4,结束索引end为6。 9. 计算中间索引mid,即mid = (4 + 6) / 2 = 5。 10. 比较中间索引对应的元素与目标元素1的大小关系: - 中间元素1等于目标元素1,但我们要的是第一个1,所以更新结束索引为mid。 11. 继续二分查找,此时起始索引start为4,结束索引end为5。 12. 计算中间索引mid,即mid = (4 + 5) / 2 = 4。 13. 比较中间索引对应的元素与目标元素1的大小关系: - 中间元素1等于目标元素1,但我们要的是第一个1,所以更新结束索引为mid。 14. 继续二分查找,此时起始索引start为4,结束索引end为4。 15. 起始索引等于结束索引,查找结束。返回起始索引4。 所以,在给定的数组中,使用二分法查找第一个1的索引为4。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值