题目
给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返回下标,否则返回 -1。
分析
- 线性升序数组,典型的二分查找算法
- 数组有序降低了题目难度,如果是无序数组,就先排序,再二分查找
- 算法实现有两种思路:递归、非递归
- 时间复杂度
,空间复杂度
算法代码(递归)
public int search(int[] nums, int target) {
return binarySearch(nums, target, 0, nums.length - 1);
}
private int binarySearch(int[] nums, int target, int left, int right) {
if (left > right) return -1;
int mid = (left + right) / 2;
if (nums[mid] == target) return mid;
else if (nums[mid] < target) return binarySearch(nums, target, mid + 1, right);
else return binarySearch(nums, target, left, mid - 1);
}
算法代码(非递归)
public int search(int[] nums, int target) {
int left = 0, right = nums.length - 1;
while (left <= right) {
int mid = (left + right) / 2;
if (nums[mid] == target) return mid;
else if (nums[mid] < target) left = mid + 1;
else right = mid - 1;
}
return -1;
}