算法总结

时间复杂度

经验

  • 比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. 在答案范围内二分检测
相关文章
相关标签/搜索