LeetCode-搜索插入位置
Table of Contents
1 Easy-搜索插入位置
1.1 题目描述
给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。
你可以假设数组中无重复元素。
1.2 示例 1:
输入: [1,3,5,6], 5
输出: 2
1.3 示例 2:
输入: [1,3,5,6], 2
输出: 1
1.4 示例 3:
输入: [1,3,5,6], 7
输出: 4
1.5 示例 4:
输入: [1,3,5,6], 0
输出: 0
2 自己的解答
2.1 思路
- 使用二分查找法查找插入的位置.
- 定义了三个变量,start,end,mid,分别表示开始查找索引的起始位置,中间位置和末尾位置.
- 遍历的条件为start小于等于end.返回值为start
- 如果数组中不存在target,则会遍历到start和end相等的情况时候,mid同样也在start处
- 如果target大于nums[mid],插入位置在start后,start会自动加1,同样结束了循环.
- 如果target小于nums[mid],插入位置在,插入在同样在start处,此时只是对end-1,同样结束了循环.
2.2 代码
package algorithm.easy; public class SearchInsert { public static int solution(int[] nums, int target) { if (nums == null || nums.length < 1) return 0; // 使用二分查找法 int start = 0; int end = nums.length - 1; int mid = 0; // 如果数组中不存在target,则会遍历到start和end相等的情况时候,mid同样也在start处 // 如果target大于nums[mid],插入位置在start后,start会自动加1,同样结束了循环. // 如果target小于nums[mid],插入位置在,插入在同样在start处,此时只是对end-1,同样结束了循环. while (start <= end) { // 中间元素是start和mid相加,mid是起始元素的索引+start到end长度的一半 mid = start + (end - start)/ 2; if (target < nums[mid]) { end = mid - 1; } else if (target > nums[mid]){ start = mid + 1; } else { return mid; } } return start; } public static void main(String[] args) { int[] test = {1,3,4,6}; int[] test2 = {1,3,5,7,8,9,11}; int [] test3 = {1,3}; System.out.println(solution(test,5)); // System.out.println(solution(test2,12)); } }