此次的問題比較簡單,也沒有限制時間複雜度,可是要注意一些細節上的問題。java
一樣也能夠使用二分查找和直接查找。算法
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; } }
不少東西咱們反覆的練習就是爲了可以打開本身的思惟,從而推陳出新。數組