package suanfa.array;
/**
二分查找
请实现有重复数字的升序数组的二分查找
给定一个 元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的第一个出现的target,如果目标值存在返回下标,否则返回 -1/
public class BinarySearch {public static void main(String[] args) {
int[] nums = new int[]{1, 2, 2, 3, 4}; System.out.println(search(nums, 2));
}
public static int search(int[] nums, int target) {
int left = 0; int right = nums.length - 1; while (left <= right) { int middle = (left + right) / 2; if (nums[middle] > target) { right = middle - 1; } if (nums[middle] < target) { left = middle + 1; } //如果 middle的对应的值和目标值相等,则在 left和middle之间找下标最小的 if (nums[middle] == target) { while (middle != 0 && (nums[middle - 1] == nums[middle])) { middle--; } return middle; } } return -1;
}
}