用二分查找法查找有重复数字的数组中的元素的第一个下标

608 阅读1分钟

1.思路

  • 首先数组应该是非递减顺序排列的
  • 代码总体上是二分查找法的实现代码,只是在找最小index时,需要特殊处理一下
  • 如果找到了某个index,还要判断它是不是最小的index,即继续往左半部分

2.代码

import java.util.*;
public class Solution {
    public int search (int[] nums, int target) {
        int index = -1; //找不到返回-1
        int low = 0;
        int high = nums.length-1;
        while(low<=high){ //low<=high,说明已经找完了整个区间
            int mid = (low+high)/2;
            if(nums[mid]==target){
                index=mid; //记录第一次找到的值
                high = mid-1; //找到了第一次,之后的就往更小的区间找
            }else if(nums[mid]<target){
                low = mid+1;//在右边
            }else{
                high=mid-1;//在左边
            }
            
        }
        return index;
        
    }
}