Skip to content

Latest commit

 

History

History
 
 

DFS:Depth First Search,深度优先搜索,尽可能深的搜索。比如前、中、后序遍历。

    public List<List<Integer>> levelOrder(TreeNode root) {
        List<List<Integer>> allResults = new ArrayList<>();
        if(root==null){
            return allResults;
        }
        travel(root,0,allResults);
        return allResults;
    }

    private void travel(TreeNode root,int level,List<List<Integer>> results){
        if(results.size()<=level){
            results.add(new ArrayList<>());
        }
        results.get(level).add(root.val);
        if(root.left!=null){
            travel(root.left,level+1,results);
        }
        if(root.right!=null){
            travel(root.right,level+1,results);
        }
    }

BFS:Breadth First Search,广度优先搜索,按照层来搜索。比如层次遍历(层序遍历也可用DFS实现)。

public List<List<Integer>> levelOrder(TreeNode root) {
    List<List<Integer>> allResults = new ArrayList<>();
    if (root == null) {
        return allResults;
    }
    Queue<TreeNode> nodes = new LinkedList<>();
    nodes.add(root);
    while (!nodes.isEmpty()) {
        int size = nodes.size();
        List<Integer> results = new ArrayList<>();
        for (int i = 0; i < size; i++) {
            TreeNode node = nodes.poll();
            results.add(node.val);
            if (node.left != null) {
                nodes.add(node.left);
            }
            if (node.right != null) {
                nodes.add(node.right);
            }
        }
        allResults.add(results);
    }
    return allResults;
}

贪心算法 贪心算法是一种在每一步中都采取当前状态下最优的选择,从而希望结果是全局最优的。 由于贪心算法的高效性以及所求的的答案接近于最优结果,因此可以作为辅助算法或解决一些要求结果不是特别准确的问题。如:最小生成树、求哈弗曼编码 贪心是局部最优,且不能回退;动态规划会保存当前结果,全局最优,且能回退

二分查找 二分查找的前提:1)单调性 2)存在上下界 3)能够通过索引访问

public int binarySearch(int[] array, int target) {
    int left = 0, right = array.length - 1, mid;
    while (left <= right) {
        mid = (right - left) / 2 + left;

        if (array[mid] == target) {
            return mid;
        } else if (array[mid] > target) {
            right = mid - 1;
        } else {
            left = mid + 1;
        }
    }

    return -1;
}