LeetCode: Populating Next Right Pointers in Each Node II constant O(1)空间解法

原题地址为:http://oj.leetcode.com/problems/populating-next-right-pointers-in-each-node-ii/
内容如下:

Follow up for problem “Populating Next Right Pointers in Each Node“.

What if the given tree could be any binary tree? Would your previous solution still work?

Note:

  • You may only use constant extra space.

 

For example,
Given the following binary tree,

         1
       /  
      2    3
     /     
    4   5    7

 

After calling your function, the tree should look like:

         1 -> NULL
       /  
      2 -> 3 -> NULL
     /     
    4-> 5 -> 7 -> NULL

题目简而言之就是要按层遍历二叉树,然后加上指向同一层下一个节点的引用。本来没有什么难度,但是题目中常数空间的要求把这题的做法限制的死死的:不能额外建立一个队列,不能用递归。

这个题目最tricky的地方就是当我遍历某一层的时候,已经遍历过并建好链表的上一层本质上就是一个队列!我们只要保存好当前一层的起点,当这一层遍历完成开始遍历下一层的时候,利用这个起点构成的链表进行按层遍历即可。

为什么在Safari中调试时,console.log()会显示undefined?

在Safari中对iPad设备上的网页进行Debug的时候,使用console.log()命令往往会显示undefined,如下图所示。

这是为什么呢?其实我们只要在桌面版Safari中对普通网页进行Debug就知道了。

还是有一个undefined的输出,但是console.log()的结果已经打印出来了。
这个undefined其实是console.log()函数的返回值,而在桌面版Safari上对普通网页进行调试的时候,由于Debug输出就在当前浏览器中,所以调试信息能够正确的打印出来,而对iPad进行远程Debug的时候,调试信息其实是输出到了iPad上Safari的console里面去了,所以在桌面Safari中看不到Debug的输出信息。

那么怎么进行调试呢?其实非常简单,undefined是console.log()的返回值,说明console永远都会打印命令的返回值,我们只要简单的输入变量的名字,就能看变量的值了。

 

如何去除iPad优酷上的广告并且使用原生播放器播放视频

最近iPad版优酷视频的广告越来越长,出现频率也越来越高。这件事情实在是不能忍,稍微研究了一下怎么去掉iPad版优酷的广告,对iPad版网页和桌面版网页均有效。(至于那个优酷的iPad App,因为只能横屏又不能按上传者查看视频还特别费电,用户体验一塌糊涂,我从来不用)

首先在iPad里打开下面的链接。

/wp-content/uploads/2013/09/code.txt

然后将这个页面加为书签,标题那里可以自己随便写,比如“优酷去广告”之类。

然后复制页面上的这一大段代码,编辑刚才的书签,将书签地址中的内容用刚才复制的代码替换,完成编辑。

这样就设置好啦!看优酷的时候,只要点一下书签,iPad优酷的播放器就会被自动替换成系统原生HTML5播放器,并且也没有广告了!

 

百度地图Android SDK无法定位的解决办法

最近在使用百度地图安卓API的时候发现一个问题,有一段定位的代码无法进行定位。这个问题很奇怪,因为在整个应用的其它部分也有调用定位的代码,都能够成功定位,但是惟独这里不行。

先简单介绍一下程序的设计,我们在界面上有一个按钮用于选择位置,点击按钮后会弹出一个对话框选择是在地图上选点还是自动定位当前位置,如果点了定位当前位置就会自动进行定位。

经过反复检查之后才发现问题的所在:传入定位函数参数的Context对象有问题。一般来说这种情况下我们都会把含有按钮的Activity作为Context对象参数传入,很不幸在弹出对话框之后,这个Context就已经失效了,所以百度地图才会无法定位。

解决的方法也很简单,直接传入全局Context即可,例如getApplicationContext()。

Android百度地图SDK开发出现Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/baidu/mapapi/BMapManager 错误

之前和同学一起做Android的地图应用开发,用到了百度地图的SDK。但是很奇怪的事情是,在同学的电脑上一切正常,但是在我的电脑上死活就跑不起来,显示

Exception Ljava/lang/UnsatisfiedLinkError; thrown while initializing Lcom/baidu/mapapi/BMapManager

这实在是太诡异了。由于我们使用的Eclipse版本不同,我用的是ADT 22,他用的是更早的,我一度怀疑是IDE的问题,然而按照百度官方文档修改项目配置后,依然报同样的异常。

为了解决这个问题,我上网搜索资料,http://longquan.iteye.com/blog/1583167 这篇文章给了我启发。我开始一样一样检查问题的原因,最后惊讶的发现armeabi文件夹下竟然缺少so文件!

这是怎么回事?为什么我的同学能正常运行呢?仔细检查之后我才发现是SVN惹的祸,我们的so文件压根就没有出现在版本库中,之所以会这样因为*.so文件是SVN客户端默认忽略的文件类型。

知道了原因接下来就好办了,在SVN的setting中取消so文件类型的忽略,然后重新commit和update一次,就成功运行了!