二分查找法:
前提条件:
数组升序或降序;
方法:
设置左右指针,以及一个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 }