LeetCode-搜索插入位置

LeetCode-搜索插入位置

LeetCode-搜索插入位置

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 思路

  1. 使用二分查找法查找插入的位置.
  2. 定义了三个变量,start,end,mid,分别表示开始查找索引的起始位置,中间位置和末尾位置.
  3. 遍历的条件为start小于等于end.返回值为start
  4. 如果数组中不存在target,则会遍历到start和end相等的情况时候,mid同样也在start处
  5. 如果target大于nums[mid],插入位置在start后,start会自动加1,同样结束了循环.
  6. 如果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));
    }
}

Date: 2018-11-02 23:07

Author: devinkin

Created: 2018-11-02 五 23:07

Validate

posted @ 2018-11-02 23:08  EmacsDevinkin  阅读(134)  评论(0编辑  收藏  举报