二分挺简单的,这题目关键是找到第一个等于target的下标,所以我在后面加了一个while循环,逐个向前找
不过我还是解释下二分查找——一般用于排好序的查找
二分,可知是分成两个部分寻找。把一个数组从中间分成前一部分和后一部分,也常用左边和右边,然后讲目标数与中间数比较大小,比中间大,然后接着与左边或右边进行比较(取决于是升序还是降序),直至找到或不存在。
常用while和递归实现
public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 如果目标值存在返回下标,否则返回 -1 * @param nums int整型一维数组 * @param target int整型 * @return int整型 */ public int search (int[] nums, int target) { // write code here int left=0,right=nums.length-1; int mid=-1; while (left<right){ mid=(left+right)/2; if (nums[mid]>target){ right=mid-1; mid=(left+right)/2; }else if (nums[mid]<target){ left=mid+1; mid=(left+right)/2; }else { break; } } while (mid>0&&nums[mid]==nums[mid-1]){ mid=mid-1; } return mid; } }