归档 2010

最后更新于 .

这是之前朋友出的一道题目,感觉不错,就拿来分享一下。
问题如下:
一个单向链表,怎么判断他是否存在环?

图示:

show

对于最简单的做法就是:
用一个指针走一圈,如果重复遇到其他任何一个指针,则证明有环。
但是这样做的问题就是:

单指针需要留下脚印,会弄脏链表数据,而如果不能脏数据的话,就需要增加一个容器,并且增加查找的开销。

有没有更好的方法呢?有的,定义一对快慢指针分别为ptr_fast,ptr_slow,ptr_slow走一步,ptr_fast走两步,如果ptr_slow和ptr_fast最终能相遇,那么证明有环。

解释如下:
画图:

show2

设步长分别为x和y,链表回环结点数为n,非环回环为m
设经过t次跨步,则只要xt和yt对n同余并且xt和yt都大于m就可以相遇(假设x>y)

xt-yt=pn
yt>m

得到:
t=pn/(x-y) > m/y(只需pn可整除(x-y))

指针移动次数为(x+y)t=(x+y)/(x-y)*pn

而要想pn永远整除(x-y ...

最后更新于 .

今天在测试的时候发现一个很诡异的问题,语言描述不清楚,直接看代码吧。为了测试各种可能性,我写了两种类继承的代码如下:

#!/usr/bin/python
#-*- coding: UTF-8 -*-

import re
import sys
import os
import json
import simplejson

class Foo(object):
    _data = 1

    def __init__(self,data):
        self._data = data
    def ShowFoo(self):
        print 'Foo',self._data

class Bar(Foo):
    def __init__(self,data):
        super(Bar,self).__init__(data)
    def ShowBar(self):
        #会报错 ...

最后更新于 .

今天在翻unix网络编程的时候,无意中看到了使用匿名定义结构体/类定义数组的一段代码。

于是写了测试代码如下:

#include <iostream>
#include <string>
#include <vector>
#include <map>
using namespace std;

struct st
{
    int a;
    int b;
    char *p;
    int c;
}sts[]={
    {1,1,"hh",1},
    {2,2,"ff",2}
};

class CObj
{
    public:
        int a;
        string s;
        int b;

}objs[]={
    {1,"x",11},
    {2,"y",22}
};

int main(int argc, const ...

最后更新于 .

最近不少朋友反馈博客中的代码格式不适于阅读,非等宽字符等等问题,为此今晚特意试用了几款wordpress的代码高亮插件,包括SyHi,coolcode,wp-syntax,无奈发现SyHi根本用不了,coolcode不支持vim语法,只有wp-syntax能够满足要求。

因此以后的文章中出现代码均会以如下格式展示:

function! SetBaiKeBuffer()
let bkbuffloaded=bufloaded("baike")
if !bkbuffloaded
    execute "sp baike"
    execute "normal \Z"
else
    while 1
        execute "normal \<c-w>w"
        let currBuff=bufname("%")
        if currBuff == "baike"
            execute "normal \Z"
            break
        endif
    endwhile

endif
endfunction

另外,我也重新修正了几篇访问量比较高的博文,将里面的代码用这种最新方式来高亮,效果会比原来好很多。如果有朋友觉得之前的哪篇文章格式需要修正,也可以直接在这里留言,我将尽快处理。

-------------------------------------------分割线------------------------------------------

列表如下:

VIM-一键编译单个源文件

把VIM打造成一个真正的IDE ...

最后更新于 .

声明:
    本文谨代表本博作者个人观点,与腾讯公司官方无任何关系。

今天(2010年9月16日),腾讯社区开放平台正式上线,域名是:opensns.qq.com

主页

从页面上看,主要分了分享组件、喜欢组件、认证空间、应用接入等模块.
其中分享组件、喜欢组件、认证空间主要针对第三方网站合作;应用接入主要针对应用开发商。

我们主要看一下应用的接入流程。
首先点击导航栏的应用接入:

应用接入
点击创建应用后,进入开发者注册页,区分了公司和个人两种方式:

创建应用-公司2创建应用-个人  

公司和个人分别要求上传营业执照或身份证照片。

注册成功后,进入页面:

保存

我们来尝试创建一个应用:

创建

成功后,进入如下页面:

创建成功

我们来点击一下预览(apptest.qq.com是我自己开发的一个简单应用):

preview

可以看出,应用中列出了包括本人/机器人好友的相关信息。

之后,我们来看一下开放平台提供的调试工具,点击调试工具进入调试页面:

调试1

OpenAPI列出了开发者能够调用的API列表,包括:

user/info   主人信息
user/multi_info 批量获取好友信息
user/is_setuped 主人是否安装了应用
user/emotion ...

最后更新于 .

上一篇文章说道在用python的suds库的时候,发的中文总是乱码(windows下还总是encode失败,真是杯具),无奈产品经理又死活都要求是中文,今天研究了一天,总算是搞定了。 说一下定位的过程。

1.先拿一段php的soap代码来看:

<?php 
$client = new SoapClient("http://ws.sb.com/messageservice.asmx?wsdl",Array('trace'=>True)); 
// 参数转为数组形式传递 
$aryPara = array('sender' => 'dantezhu', 
    'receiver' => 'dantezhu', 
    'title' => 'OZ评论消息提醒', 
    'msgInfo' => 'sss', 
    'messageType'=>0); 
// 调用远程函数 
$ret = $client->SendRTX($aryPara); 
var_dump($ret); 
echo $client->__getLastRequest(); 
?>

这段代码是能够正确的发送请求的,通过__getLastRequest打出发送包,如下:

< ...

最后更新于 .

一.美化你的bash
每次在进入一个很长的目录的时候,光标都会变得很靠右,很丑陋:

1

今天同事给了一段配置:

export PS1="\[\e[36;1m\]\u\[\e[0m\]@\[\e[33;1m\]\h\[\e[0m\]:\[\e[31;1m\]\w\[\e[0m\]\n\$ "

写入.profile后,会变成如下的样子,效果不错,哈哈:

2

二.在python中使用soap -- suds
今天需要通过soap来给RTX的其他用户发消息,于是研究了一下python中的soap包。
先是发现了SOAPpy,包括Dive into Python都推荐了这个包,不过经过我的试用之后,发现打死都显示不了任何数据,于是我搜啊。。终于在某个不起眼的角落看到了这样一段话:

Unfortunately, at the moment, I don't think there is ...

最后更新于 .

因为下周要用php写项目,所以周末在家里重新看php的语法,看到三元描述符,突然想起来python是没有三元描述符的,印象中依稀记得有模拟的实现,于是上网上搜了一下。
(对应C语言的 X ? V1:V2)
找到一篇文章:http://blog.csdn.net/xiaoyin992/archive/2008/12/29/3635015.aspx
其中一种是:

(X and V1) or V2

正常情况下是不会有错误的,但是文章中也提到了,当V1=""时,就会有问题
比如

print (True and '') or 'V'
print (False and '') or 'V'

输出永远都是: V

完美的解决方案是在《python核心编程中提到的》:

V1 if X else V2

原文如下:

如果你来自 ...

最后更新于 .

出于种种原因,最近感觉还是在自己机器上装个linux写程序靠谱些,毕竟总是VPN到公司内网速度也太慢了。
本文最终实现了:

1.在windows下用virtualbox安装了ubuntu7.04命令行版
2.ubuntu能够与主机(即windows)共享网络
3.在windows下可以直接ssh到ubuntu上

遗留问题(详见文末):

1.ubuntu与主机共享文件夹失败
2.rz/sz命令安装失败

先截图如下(putty中的截图):

putty

OK,我们一步步来说:
一.VirtualBox安装
    1.到http://www.virtualbox.org/wiki/Downloads下载windows版本
    2.一路点击next,出现不兼容提示框,直接继续即可。
二.Ubuntu安装
    1.选择安装命令行的版本,安装即可
    2.设置root密码。ubuntu的root默认居然是不启用的,需要在启动的时候,按ESC进入recovery模式,会自动以root权限登录 ...

每月存档

去年

2009

明年

2011