与超级英雄大战的反派们永远是中二的……


作为一部爆米花电影,复联3无疑是成功的。影片开头承接雷神3的彩蛋,直接点出boss灭霸,也就是索尔刚打败他姐,船还没开稳就遇上了灭霸,有够背的。。。随后展开三条主线,毫不拖泥带水,笑点与泪点并存,幽默与史诗兼具,上一秒捧腹大笑,下一秒如鲠在喉。数十个超级英雄同框,场面宏大,群星云集,总有一款属于你的超级英雄。
本片对反派灭霸的人物刻画既是一大亮点,也是一大槽点,甚至把本片成为《灭霸1:无限战争》也不为过。无数的电影和动漫给出了一个正经反派的标准模板:实力,需要吊炸天,在刚出场时一定要碾压群雄,代价是智商的不断下线;经历,必须是苦难的,挫折的,都是有故事的人;理想,当然是中二的,含泪抛弃一切毁灭世界?灭霸完美符合这一形象,极端,暴戾,激进,认为自己掌握了世界的终极真理,付诸实践并强迫他人接受。他把自己荒谬的思想称之为信仰,认为这是一种普世思想,是对他人的“仁慈”,可怕的是这种伪善似乎并不纯粹的利己。
关于灭霸的另一半人格可以从一个细节体现出来:在藏有灵魂石的星球上遇到了红骷髅,他的第一反应是,抬手把女儿挡在身后。在红骷髅说出获得灵魂石的代价是“sacrifice”时,我立马反应过来了,代价即是卡魔拉。这个桥段像极了火影里的设定:宇智波一族必须亲手杀死自己最珍视的人才能获得永恒的写轮眼。事实上,整个影片,包括世界观的设定,人物关系设定,甚至打斗时的某些方式,都与火影有异曲同工之妙令人唏嘘的是,卡魔拉此时对父亲开启了嘲讽模式,认为父亲没有灵魂,更不可能有所爱之人。她并不知道,即使凶恶如灭霸,此刻也在爱与理想中抉择,更不知道,自己属于前者。
比较满意的一点是,全片都没有嘴炮,反派话不多就是干,超级英雄们也没有嘴遁技能,打起架来不忘带上俏皮的幽默,比起日漫动不动耍嘴皮子,打不过就劝降,用爱感化反派还是不知道高到哪里去了。。。当然,很多优秀日漫更加理想主义,刻画世界观的矛盾关系更加深入引人,这点我是有体会的。。。至于后续剧情发展的话,我是倾向于,响指过后消失的人们应该是去了不同的时空,当场去世的话想想就毛骨悚然。。。关于时空这个话题,我是超感兴趣的,但是这个梗确实有被用烂的趋势。一句话表明态度:影视作品中一切的人物复活,都有狗尾续貂的嫌疑。
最后,有生之年能够看到两位“福尔摩斯”同框一本满足。原著中,无论是Holmes面对Moriarty时说的“如果能保证毁灭你,那么,为了社会的利益,即使和你同归于尽,我也心甘情愿”还是“It’s every man’s business to see justice done”,都让我在本片中看到了影子。


从中序与后序遍历序列构造二叉树


问题
  根据一棵树的中序遍历与后序遍历构造二叉树。可以假设数中没有重复元素。
  例如,给出
中序遍历 inorder = [9,3,15,20,7]
后序遍历 postorder = [9,15,7,20,3]

  返回以下的二叉树

分析
  首先明确两点:
  1. 后序遍历输出的数组,最后一个元素为树根。
  2. 中序遍历输出的数组,树根左边的元素构成左子树,树根右边的元素构成右子树。
  基于这两点,可以先从后序遍历中找到整个树的树根,再在中序遍历的结果中找到该树根,树根左边的元素即为左子树,右边的元素即为右子树。至此,该问题形成一个递归问题--左子树和右子树在后序遍历中也分别对应一个数组集合,对左子树和右子树分别递归即可还原原来的二叉树。

代码

/**
* Definition for a binary tree node.
* struct TreeNode {
*   int val;
*   TreeNode *left;
*   TreeNode *right;
*   TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/

class Solution {
public:
  TreeNode* buildTree(vector<int>& inorder, vector<int>& postorder) {
    if(inorder.size()!=postorder.size())
      return NULL;
    if(inorder.size()==0 || postorder.size()==0)
      return NULL;

    int length=inorder.size();
    TreeNode* root=new TreeNode(postorder[length-1]);
    int root_inorder_index=-1;
    vector inorder_l,inorder_r,postorder_l,postorder_r;
    for(int i=0;i<length;i++)
      if(inorder[i]==postorder[length-1]){
        root_inorder_index=i;
        break;
      }

    for(int i=0;i<root_inorder_index;i++){
      inorder_l.push_back(inorder[i]);
      postorder_l.push_back(postorder[i]);
    }

    for(int i=root_inorder_index+1;i<inorder.size();i++){ 
      inorder_r.push_back(inorder[i]); 
      postorder_r.push_back(postorder[i-1]); 
    } 

    root->left=buildTree(inorder_l,postorder_l);
    root->right=buildTree(inorder_r,postorder_r);
    return root;
  }
};

A brief to-do-list?


  1. 突然就很想拉小提琴了。很早就被丢弃的技能,现在想起来自然是十分后悔没有一直练下去,怕是弓都握不稳了……寒假时就有过在北京买琴的想法,由于各种原因,似乎实现难度比较大。
  2. 和小伙伴们一起踢球。清华的运动氛围果真很浓,每每经过操场看到一群人在绿茵场挥洒汗水,想起中学时代夕阳下的奔跑,那是我逝去的青春……
  3. 买一台天文望远镜。小学时就产生的兴趣,那时候痴迷于星星、UFO、航天飞机等等,也看了许多相关书籍和纪录片,甚至立志做一名航天员(笑)。长大了即使世界观更加深刻了,也要保持对自然的好奇心呐……

  暂时就想到这些。果然都是些烧钱的爱好,如果有可能的话,小提琴和望远镜可以买千元以内入门级的,球衣球鞋足球啥的大概会便宜些。然而前天买衣服花了不少钱,免不了吃一波土了。更重要的是,在一个我本不应属于的城市与学校,一切似乎都好难……


我们的目标是星辰和宇宙


每天在喧闹的地铁车厢里看电子版的《平行世界》,有一种凌驾于世俗之上的神奇感受。宇宙从哪里来,又会演化成怎样?这也是哲学上的终极问题。宇宙学的问题很难用实验证明,脑洞大开的物理学家们只得通过观测佐证猜想。宇宙的真相依旧扑朔迷离,它留给我们的想象才是最美好的东西。
R.I.P.


给自己定几个小目标


  1. 读完《Effective C++》。该书给出了“改善程序与设计的55个具体做法”,深刻贯彻了书名中的"effective"思想,解决了我之前遇到过的某些困惑,促使我对C++的理解层次从语法晋升到编程哲学,值得我将其作为未来的编程实践标准。
  2. 阅读并理解SVR_L0的源码。这项工作需要时间,可能略微吃力。然而我现在最缺的就是对这方面代码的接触。对照论文通晓源码,会给我带来编码以及理论上的启发。
  3. 阅读更多的文献。这其实是一个长期目标,在入门三维重建时尤为困难。然而并不能急躁,一篇文章还是要读通透,长久坚持定会引起质变。

长远的打算则不做考虑。我也很明白,自己对在THU的生活逐渐失去了耐心,目前的挫败感是高考之后的顶峰……还是要善始善终啊,更加不能接受的是空手而来又空手而去。话说回来,这里的人果真都气质不凡,低调、谦虚、务实、严谨的作风从骨子里透露出来,能多受些熏陶也是极好的。