二分查找法:

  前提条件:

    数组升序或降序;  

 

  方法:

    设置左右指针,以及一个pivot指针。每次判断pivot指针所指的数据与target是否相同,相同则返回pivot指针。

    如果不相同,判断target与nums[pivot]大小;如果target>nums[pivot],left = pivot + 1;否则 right = pivot - 1;

  例题:

    给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target  ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,不存在返回-1。

 1 class Solution {
 2   public int search(int[] nums, int target) {
 3     int pivot, left = 0, right = nums.length - 1;
 4     while (left <= right) {
 5       pivot = left + (right - left) / 2;
 6       if (nums[pivot] == target) return pivot;
 7       if (target < nums[pivot]) right = pivot - 1;
 8       else left = pivot + 1;
 9     }
10     return -1;
11   }
12 }