描述
请实现无重复数字的升序数组的二分查找
给定一个 元素升序的、无重复数字的整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标(下标从 0 开始),否则返回 -1
数据范围:0 ≤len(nums)≤2×10^5 , 数组中任意值满足 |val| ≤ 10^9
进阶:时间复杂度 O(logn) ,空间复杂度 O(1)
示例1
输入:
[-1,0,3,4,6,10,13,14],13
返回值:
6
说明:
13 出现在nums中并且下标为 6
示例2
输入:
[],3
返回值:
-1
说明:
nums为空,返回-1
示例3
输入:
[-1,0,3,4,6,10,13,14],2
返回值:
-1
说明:
2 不存在nums中因此返回 -1
二分法(推荐使用)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| import java.util.*; public class Solution { public int search (int[] nums, int target) { int l = 0; int r = nums.length - 1; while(l <= r){ int m = (l + r) / 2; if(nums[m] == target) return m; if(nums[m] > target) r = m - 1; else l = m + 1; } return -1; } }
|
self
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| public static int search(int[] nums, int target) { if (nums.length == 0) { return -1; } int i = 0; int j = nums.length-1;
while (i <= j) { int mid = (i + j) / 2; if (nums[mid] == target) { return mid; } if (nums[mid] > target) { j = mid - 1; } if (nums[mid] < target) { i = mid + 1; } } return -1; }
|