算法總結

時間複雜度

經驗

  • 比O(n)更優的時間複雜度幾乎只能是O(logn)的二分法
  • 根據時間複雜度倒推算法能夠做爲面試策略。

二分法

  • 使用Recursion(遞歸)仍是Non-Recursion(非遞歸)
    • 面試官要求不使用Recursion
    • 不用Recursion是否會形成實現很複雜
    • Recursion的深度是否會很深
    • 考點是Recursion vs Non-Recursion。有可能就是在考你是否是會Recursion
  • 記住不要本身亂判斷,和麪試官討論

通用模板的四點要素

  1. 循環結束條件:start + 1 < end;
  2. mid = start + (end - start) / 2
  3. 判斷A[mid] ==, <, >
  4. double check:A[start] A[end] ? target
public class Solution {
    /**
     * @param nums: The integer array.
     * @param target: Target to find.
     * @return: The first position of target. Position starts from 0.
     */
    public int binarySearch(int[] nums, int target) {
        if (nums == null || nums.length == 0){
            return -1;
        }
        int start = 0, end = nums.length - 1;
        //相鄰就退出
        while (start + 1 < end){
            int mid = (end - start)/2 + start;
            if (target == nums[mid]){
                return mid;
            }else if (target < nums[mid]){
                end = mid;
            }else {
                start = mid; 
            }
        }
        
        //double check
        if (nums[start] == target){
            return start;
        }
        
        if (nums[end] == target){
            return end;
        }
        
        return -1;
    }
}
複製代碼

二分位置 之 OOXX

二分位置 之 Half half

二分答案

  1. 肯定答案的範圍
  2. 在答案範圍內二分檢測
相關文章
相關標籤/搜索