Java教程

算法模板笔记

本文主要是介绍算法模板笔记,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

DFS:完全遍历,找到 符合设定条件 的所有结果,时间复杂度高

BFS:部分遍历,找到 最短/最小的结果,空间复杂度高

BFS模版:

int BFS(Node start, Node target)
{
    deque<Node> q;//--核心数据结构
    set<Node> visited;//--避免走回头路的数据结构
    
    q.push_back(start);/* 将起点加入deque和visited */
    visited.insert(start);
    int step = 0;

    while(!q.empty()){/* deque非空则循环 */
        int sz = q.size();

        for(int i = 0; i < sz; ++i){/* 循环遍历队列节点 */
            Node cur = q.front();/* 取出队列最前面的节点cur */
            q.pop_front();
            if(cur.val == target.val)/* 判断是否结束 */
                return step;
            
            /* 对 本层数据 自定义操作 */
            
			/* 循环遍历cur的邻居节点, 
			如果没有visited过,则加入到deque和visited中*/
            for(Node *nei: cur.neigh){
                if(nei not in visited){
                    q.push_back(nei);
                    visited.insert(nei);
                }
            }
        }
        /* 最后次数++ */
        ++step;
    }
}

DFS模版:

未完成?

bool backtrace(路径,选择,选择列表)
{
	if(满足退出条件){
        result.add(路径);
        return true;
    }
    
    if(不满足路径条件){
    	return false;
    }
    
    当前选择,加入路径();
    for(下一选择 in 选择列表){
        backtrace(新的路径,下一选择,选择列表);
        //--if(backtrace(路径,下一选择,选择列表))
        //--	return true;
    }
    撤销选择,退出路径();
    return false;
}

bool backtrace(路径,选择列表)
{
	if(满足退出条件)
        result.add(路径);
        return true;
    
    if(不满足路径条件)
    	return false;
    
    for(选择 in 选择列表)
    	做选择,加入原路径();
        if( backtrace(下一递推路径,选择列表) )
            return true;
        撤销选择,退出原路径();
    return false;
}

二分查找模版:

非查找边界的版本:

int binarySearch(int[] nums, int target) {
    int left = 0; 
    int right = nums.length - 1; // 注意

    while(left <= right) { // 注意
        int mid = (right + left) / 2;
        if(nums[mid] == target)
            return mid; 
        else if (nums[mid] < target)
            left = mid + 1; // 注意
        else if (nums[mid] > target)
            right = mid - 1; // 注意
        }
    return -1;
}

参考:https://mp.weixin.qq.com/s?__biz=MzAxODQxMDM0Mw==&mid=2247484507&idx=1&sn=36b8808fb8fac0e1906493347d3c96e6&chksm=9bd7fa53aca0734531ec9f37127c0f371344e1690918888dfb1cfdf043c40c0b43d1121e5851&scene=21#wechat_redirect

二叉树模版

void traverse(Node * root)
    if(root == nullptr)
        return;
    
	//前序遍历
    traverse(root->left);
    //中序遍历
    traverse(root->right);
	//后序遍历
这篇关于算法模板笔记的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!