题目
leetCode 第 35 题,搜索插入位置 关联类型:数组
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
示例 1:
输入: [1,3,5,6], 5
输出: 2
示例 2:
输入: [1,3,5,6], 2
输出: 1
示例 3:
输入: [1,3,5,6], 7
输出: 4
示例 4:
输入: [1,3,5,6], 0
输出: 0
做题时间
class Solution {
public int searchInsert(int[] nums, int target) {
}
}
以上给出方法输入参数,完成作答。
题目分析
- 这题看到题目,第一个想到的应该是二分查找
- 但是里面应该注意一些临界点,比如示例 3 和 4,需要多留意
- 然后用递归调用的方式进行查找
解答分析
本文只分析本人做题思路,仅供参考,了解一种解题思想,其他各种做题思路请上网查阅。
解答成功:
执行耗时:0 ms,击败了100.00% 的Java用户
内存消耗:38.2 MB,击败了45.11% 的Java用户
class Solution {
public int searchInsert(int[] nums, int target) {
return binarySearch(nums, target, 0, nums.length - 1); //调用下面二分查找方法进行查找位置
}
public int binarySearch(int[] nums, int target, int start, int end) {
if (end<=start) { //临界点判定
if (target <= nums[start]) {//返回具体坐标
return start;
} else if (target > nums[start]) {//比最大的都大,返回长度+1
return start + 1;
}
}
//下面就是常规二分查找的调用
int middle = (end - start) / 2 + start;
if (nums[middle] == target) {
return middle;
} else if (nums[middle] > target) {
return binarySearch(nums, target, start, middle - 1);
} else
return binarySearch(nums, target, middle + 1, end);
}
}
}