乘风破浪:LeetCode真题_035_Search Insert Position

乘风破浪:LeetCode真题_035_Search Insert Position

1、前言

    此次的问题比较简单,也没有限制时间复杂度,可是要注意一些细节上的问题。java

2、Search Insert Position

2.1 问题

2.2 分析与解决

    一样也能够使用二分查找和直接查找。算法

public class Solution {
    /**
     * <pre>
     * 原题
     * [1,3,5,6], 5 → 2
     * [1,3,5,6], 2 → 1
     * [1,3,5,6], 7 → 4
     * [1,3,5,6], 0 → 0
     *
     * 题目大意
     * 给定一个排序数组,和一个指定的值,若是找到这个值,返回这个值位置,若是没有找到,返回这个值在数组中的插入位置。
     * 假设数组中没有重复的元素。
     *
     * 解题思路
     * 1、最直接的查找算法,从左向右搜索。
     * 2、使用二分查找算法。
     */
    public int searchInsert(int[] A, int target) {

        int mid;
        int lo = 0;
        int hi = A.length - 1;

        while (lo <= hi) {
            //注意这里的等于,就是为了查找不中返回lo方便
            mid = lo + (hi - lo) / 2;

            if (A[mid] == target) {
                return mid;
            } else if (A[mid] < target) {
                lo = mid + 1;
            } else {
                hi = mid - 1;
            }
        }

        return lo;
    }

    public int searchInsert2(int[] A, int target) {

        if (A == null) {
            return -1;
        }

        int i;
        for (i = 0; i < A.length; i++) {
            if (A[i] >= target) {
                return i;
            }
        }

        return i;
    }
}

 

3、总结

    不少东西咱们反复的练习就是为了可以打开本身的思惟,从而推陈出新。数组

相关文章
相关标签/搜索