算法编程方法总结

博客主要总结了动态规划、树和分治相关的算法要点。动态规划通常用数组表示,要写出边界函数和递归规律;树可采用回溯法、递归左右子树等;分治中找第k大值用快速排序,有序列表考虑二分查找。还提及了一些算法应用的注意点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

动态规划

1、通常用数组表示,且通常从后往前思考,编程从前往后迭代实现,如两个字符串的匹配
2、写出边界函数,递归规律

1、回溯法 (套用backTrack)
2、前序、后续。。
3、利用递归左右子树与或,如下,先判断当前节点node(通常以叶子节点向上考虑),在与或左右子树。

    bool hasPathSum(TreeNode *root, int sum) {
       if(root == NULL)
           return false;
        if(root->left == NULL && root->right == NULL && sum - root->val == 0)
           return true;
        return hasPathSum(root->left,sum-root->val) || hasPathSum(root->right,sum-root->val);
    }

4、建立树结构时,每一个左右孩子,都同样是root根节点,

TreeNode *fun(){
    root  = buildRoot();
    root->left=fun()
    root->right = fun()
    return root;
}

分治

N个乱序中寻找第k大的值: 利用快速排序
给定有顺序的列表,第一反应应考虑 二分查找

注意点

1、一个数是2的指数次(1,2,4,8…),它的二进制只有1个1,利用n&(n-1) ==0 判断是否该数是否符合条件。
2、判断两个字符串是否有相同字符时,可以利用二进制方法: ’

string s="abcd";
string s2="efdg";
int vs =0;
for(int j=0;j<s.size();j++){
	vs |=1<<s[j];
}
int vs2=...;
vs&vs2==0  ? 没有一个字符相同

3、桶原理
4、判断一个整数是否是回文,朴素方法是:化成字符串检测。
5、m[x][y] 为一个set时,可以设置unordered_map<int x,unordered_map<int y,set< int >> m;

部分要点

bool operator<(int a,int b){  //认为参数中默认a的值小于b,大于小于号只是表明哪个的优先级更高。
	return a>b;    //从小到大  
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值