4.搜索插入位置
题目描述: 给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。可以假设数组中无重复数。
示例:
输入:[1,3,5,6],5
输出:2
-
解法一:遍历数组,比较是否在数组中存在目标值,如果存在,返回当前下标,否则比较目标值与当前值的大小,判断插入的位置。
public static int returnLocation(int[] nums, int target) { int len = nums.length; if (nums == null) { return 0; } int i = 0; while (i < len - 1) { if (nums[i] == target) {//如果等于目标值,返回该值下标 return i; } else if (nums[i] < target && nums[i + 1] > target) {//处于两数中间 return i + 1; } else if (target > nums[len - 1]){//大于最大值,返回数组长度 return len; } else if (target < nums[0]) {//小于最小值,返回0 return 0; } i++; } return i; }
-
二分查找法。
//解法2:二分查找 public static int returnLocation2(int[] nums, int target) { int len = nums.length; //左边从0开始,右边从n-1开始,ans 初值设置为数组长度 int left = 0, right = len - 1, ans = len; while (left <= right) { //获取中间值 int mid = ((right - left) >> 1) + left; if (target < nums[mid]) { ans = mid; right = mid - 1; }else { left = mid + 1; } } return ans; }