乘風破浪: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、總結

    不少東西咱們反覆的練習就是爲了可以打開本身的思惟,從而推陳出新。數組

相關文章
相關標籤/搜索