当前位置: 首页 > wzjs >正文

昵图网 图库 素材王通seo赚钱培训

昵图网 图库 素材,王通seo赚钱培训,网站是用什么软件做的,礼品公司怎么做网站“心里的期待,总是填不满。 ” ——孙燕姿 一般题解都会给深度优先搜索和广度优先搜索,两种解法。贪多嚼不烂,并且二叉树的算法题我总是感觉代码好像就是简单递归一下就算出答案了,自己写代码就是无从下手。有点难受。所以还是把深…

“心里的期待,总是填不满。 ”

——孙燕姿

一般题解都会给深度优先搜索和广度优先搜索,两种解法。贪多嚼不烂,并且二叉树的算法题我总是感觉代码好像就是简单递归一下就算出答案了,自己写代码就是无从下手。有点难受。所以还是把深度优先搜索先拿下来。

#include<iostream>using namespace std;const int N = 10;
int n, path[N];
bool st[N];void dfs( int u ) {if ( u == n ) {for ( int i = 0; i < n; i++ ) {cout << path[i] << " ";}cout << endl;return;}for ( int i = 1; i <= n; i++ ) {if ( !st[i] ) {path[ u ] = i;st[ i ] = true;dfs( u + 1 );path[ u ] = 0;st[ i ] = false;}}
}int main() {cin >> n;dfs( 0 );return 0;
}

把代码风格优化了一下,好看了不少。是不是厉害的程序员写代码都是比较优雅的,我离变成优秀的程序员更近了一步。上面这个是深度优先搜索的一个非常经典的题。今天和一个同学交流专业课的问题,我意识到一个问题,我思考问题不能停留在问题的表面,高中的时候某个大佬学长就和我说过,实际上不存在刷完 xx 题就能考多少分这种说法,关键得看自己对写过的题的消化吸收的程度,能否从第一步独立推导到最后一步,专业课的题和算法题,我感觉自己都是这个问题,就是好像能理解,但是独立写的时候还是差点意思,我可能要多写旧题。把旧题多写几遍。题解里面还有时间复杂度的分析,我现在主要是需要学习写代码,时间复杂度虽然是必须要分析的,但是要是我写不出代码,时间复杂度会分析也没用。先把这个部分砍掉。先学会怎么写代码。

针对这个具体的题,深搜的思路非常直观,就是维护每一层的节点个数和每一层的节点的和,求平均值就把两个元素做一个除法。我的问题是,怎么判断是在同一层?深度或者高度相等,还是怎么写,感觉也不是自己的问题,要是直接就会写就是发明创造了。我要对自己包容一些。要做的就是以后遇到学过的非常类似的问题能迅速解决。其他的都预设自己是解决不了的,原谅自己。力扣判题好慢啊。

class Solution {
public:vector<double> averageOfLevels(TreeNode* root) {//输入只有一个根节点auto counts = vector< int > ();//定义一个记录节点个数的数组auto sums = vector< double > ();//定义一个节点和的数组,数组下标是层数dfs( root, 0, counts, sums );//层序遍历//从根节点开始,根节点是第零层,最后两个变量是数组auto averages = vector< double > ();//定义每层的平均值int size = sums.size();//总的层数for ( int i = 0; i < size; i++ ) {//把每层的平均值算出来averages.push_back( sums[i] / counts[i] );}//存到向量里面,向量这里定义为了 double 类型return averages;//此题实际上就是求每层的平均值}void dfs( TreeNode* root, int level, vector< int > &counts, vector< double > &sums) {//深搜的变量有四个if ( root == nullptr ) {//访问到空节点就交还权限给上级操作系统return;//非常常见的递归的操作,就是表示递归基}if ( level < sums.size() ) {// level 表示层,sums.size() 表示总层数sums[ level ] += root -> val;//更新节点和counts[ level ] += 1;//更新节点数//假设是 level 层,或者直观一些,直接就是 2 层,表示当前是第 2 层,//第 2 层实际上表示的好像是第三层,看具体定义了。现在的总层数,是多少。//总层数最开始是 0 ,也就是说最开始是进不了这个循环的。//这里为什么是这样更新的呢。//实际上,除了第一个点,都是更新后面的了。// sums.size() 表示的至少是 1 ,因为根节点要首先加进去的// 层数到后面一定是 大于等于 当前节点的和的个数。比如说算了//前面三层,那么和数组里面只有三个数字,现在算第四层,那就进不来这个判断//进下面的判断,然后再进现在这个判断。。我懂了。记住这种解法比较好} else {sums.push_back( 1.0 * root -> val );//把当前层的每个节点加到和数组counts.push_back( 1 );//哦,算是第一个点。上面的判断是累加,这里两行//都是表示该层的第一个节点。}dfs( root -> left, level + 1, counts, sums );//递归到左孩子dfs( root -> right, level + 1, counts, sums );//递归到右孩子}
};
class Solution {
public:vector<double> averageOfLevels(TreeNode* root) {auto sums = vector< double > ();auto counts = vector< int > ();dfs( root, 0, sums, counts );int n = sums.size();auto averages = vector< double > ();for ( int i = 0; i < n; i++ ) {averages.push_back( sums[ i ] / counts[ i ] );}return averages;}void dfs( TreeNode* root, int level, vector< double > &sums, vector< int > &counts ) {if ( root == nullptr ) {return;}if ( level < sums.size() ) {sums[ level ] += root -> val;counts[ level ] += 1;} else {sums.push_back( 1.0 * root -> val );counts.push_back( 1 );}dfs( root -> left, level + 1, sums, counts );dfs( root -> right, level + 1, sums, counts );}
};
/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:vector<double> averageOfLevels(TreeNode* root) {auto sums = vector< double > ();auto counts = vector< int > ();auto averages = vector< double > ();dfs( root, 0, sums, counts );int n = sums.size();for ( int i = 0; i < n; i++ ) {averages.push_back( sums[i] / counts[i] );}return averages;}void dfs( TreeNode* root, int level, vector< double > &sums, vector< int > &counts ) {if ( root == nullptr ) {return ;}if ( level < sums.size() ) {sums[ level ] += root -> val;counts[ level ] += 1; } else {sums.push_back( 1.0 * root -> val );counts.push_back( 1 );}dfs( root -> left, level + 1, sums, counts );dfs( root -> right, level + 1, sums, counts );}
};

我感觉这个题能写出来,真的非常不错了。虽然标签是简单题。思路确实是比较简单的,但是在树上面进行一些操作,感觉就是稍微有点难度。关键在于每次做一点点。嘿嘿。

http://www.dtcms.com/wzjs/392955.html

相关文章:

  • 郑州 网站建设公司南宁百度seo排名公司
  • 建立网站的模板互联网推广软件
  • 查宜春市政府建设局网站种子资源
  • 网站建设维护 天博网络引擎网站
  • 俄罗斯做货代的网站品牌运营具体做什么
  • 免费学软件的自学网站重庆seo薪酬水平
  • 给网站做seo诊断seo的形式有哪些
  • 网站说服力 营销型网站策划全网整合营销公司
  • 网站建设机构香港百度广告
  • 汕头网站建设设计公司山东网络推广网站
  • 高端网站建设企业百度指数需求图谱
  • 平台网站应该怎样做seo武汉seo诊断
  • 网站备案产品信息错误百度指数搜索指数的数据来源
  • 网站建设运营公司排行pc优化工具
  • 中粮我买网是哪个公司做的网站软文广告是什么意思
  • 性用品网商做的最好的网站网站搭建公司哪家好
  • 两学一做考学网站做网络推广有哪些平台
  • 网站开发项目建设规范什么是搜索引擎竞价推广
  • 做澳洲外贸的网站如何优化网站快速排名
  • 打开网站弹出一张图片 怎么做网页设计软件有哪些
  • 网站的充值是怎么做的东莞网站推广宣传
  • 北京做彩右影影视公司网站seo常用工具网站
  • 网站上面怎么做链接百度数据指数
  • 外包公司的人好跳槽吗官网seo哪家公司好
  • 广告网站建设与制作全球网站排名查询
  • 网页美工设计photoshop 规划教材宁波受欢迎全网seo优化
  • 成人高考报名条件及收费标准热狗seo优化外包
  • 做资讯类网站需要特殊资质吗b2b有哪些电商平台
  • 网站页面框架设计emlog友情链接代码
  • python 网站开发 sae抖音seo关键词排名技术