[LeetCode] Search Insert Position,leetcodeinsert
題意: 給出一個target找出他在有序數組中的位置
思路1: 直接遍曆 複雜度O(N)
代碼1:
public int searchInsert1(int[] A, int target) {//直接遍曆 演算法O(N) int i = 0; if(target < A[0]) return 0; if(target > A[A.length - 1]) return A.length; for(; i < A.length; ++ i){ if(A[i] == target) return i; if(target < A[i+1] && target > A[i]) return i + 1; } return i; }
思路2: 二分法,注意處理邊界問題,演算法複雜度 O(log(N))
代碼2:
public int searchInsert(int[] A, int target) {//二分法 演算法O(log(N)) int i = 0; if(target <= A[0]) return 0; if(target > A[A.length - 1]) return A.length; if(target == A[A.length - 1]) return A.length - 1; int start = 0, end = A.length - 1, mid; while (start < end){ mid = start + (end - start) / 2; if(A[mid] < target){ start = mid + 1; }else if(A[mid] > target){ end = mid -1; }else { return mid; } } if(start >= end){ if(target > A[end]) { return end + 1; } else if(target == A[end]) return end; else { return end; } } return i; }