Combinations (Python)
2014年1月31日 21:05
递归解法和非递归解法都能过。非递归解法中p指针指的位置如果达到了允许的最大值, p指针就前移。比如C(5,3)得到了[1,2,5], p指向第三个位置已经达到了最大值5, 则p前移,指向第二个位置,c[p]+=1, 于是得到[1,3,4]。当p指向第一个位置且它达到最大值,也就是[3,4,5]的时候就结束了,多谢朱老师的点播。递归解法要注意C(self, List, k)返回的是list of list。
github我的刷题 https://github.com/chaor/LeetCode_Python_Accepted | 我翻译的python3.4官网教程 kitt.me/py3
递归解法和非递归解法都能过。非递归解法中p指针指的位置如果达到了允许的最大值, p指针就前移。比如C(5,3)得到了[1,2,5], p指向第三个位置已经达到了最大值5, 则p前移,指向第二个位置,c[p]+=1, 于是得到[1,3,4]。当p指向第一个位置且它达到最大值,也就是[3,4,5]的时候就结束了,多谢朱老师的点播。递归解法要注意C(self, List, k)返回的是list of list。
O(N^2)的解法, 对sum排序。先定下来a,在从a~末尾的这一段区间里找b,c, 两头往中间走。需要注意去重, 对于num=[-4,-1,-1,0,1,2]不要出来两组(-1,0,1)
注意head == None的情况,没用到Sorted这个特性,应该有占空间更少的解法。
经Derek提醒,可用dict来存每个integer的初始位置。需注意num=[0,4,3,0], target=0这种两加数相等的情况。
Endianness=端序=尾序=字节顺序
Little-endian=小端序=低位字节存在低内存地址处,(x86,MOS Technology 6502,Z80,VAX,PDP-11等处理器)
Register:0A0B0C0D Memory: a存0D a+1存0C a+2存0B a+3存0A
Big-endian=大端序=反之,(Motorola 6800,Motorola 68000,PowerPC 970,System/370,SPARC(除V9外)等处理器)
Register:0A0B0C0D Memory: a存0A a+1存0B a+2存0C a+3存0D
product 笛卡尔积
permutations 排列
combinations 组合,没有重复
combinations_with_replacement 组合,有重复
for (int i = 0; i < 20000; ++i)
for (int j = 0; j < 2000; ++j)
for (int k = 0; k < 200; ++k)
testFunction(i, j, k);
怎么优化?
简单总结面向对象编程概念
Object(对象)
Software objects have state(状态) in fields (variables) and expose its behavior through methods(方法).
Data encapsulation = Hiding internal state and requiring all interaction to be performed through an object's methods.
Software objects benefits:
Modularity: The source code for an object can be written and maintained independently of the source code for other objects.
Information-hiding: Internal implementation details remain hidden
Code re-use
Pluggability and debugging ease: Remove a problematic object from your application and plug in a different one.
大致翻译了一下这篇文章,作者Eric Escobar
64位和32位的区别?
64位或32位指处理器。一个64位的计算机处理器能处理用64比特表示的内存和数据。如果计算机是银行,一台32位计算机有32个取款机,64位计算机有64个取款机。
数据库索引是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据,比如B+-tree。
这篇文章讲得很明白: http://www.cnblogs.com/aspnethot/articles/1504082.html
尤其喜欢那个关于字典的例子:
汉语字典的正文本身就是一个聚集索引。比如,我们要查“安”字,就会很自然地翻开字典的前几页,因为“安”的拼音是“an”,而按照拼音排序汉字的字典是以英文字母“a”开头并以“z”结尾的,那么“安”字就自然地排在字典的前部。
OS X 10.9的词典很好用,三指点击就出释义,但自带的英汉词典词库略小,可用DictUnifier来扩展词库。
DictUnifier:https://code.google.com/p/mac-dictionary-kit/downloads/list
我下载的是DictUnifier 2.1,如果提示打不开,因为来自身份不明的开发者,那就按住ctrl键,点击图标,选择打开。
词典:http://abloz.com/huzheng/stardict-dic/zh_CN/
下载的是.tar.bz2格式的词典,将它拖入DictUnifier窗口中即可,转换过程比较漫长。
打开词典,菜单栏词典-->偏好设置,选择自己需要的词典就OK了。
import itertools x = [10, 20, 30, 40, 50] len = 3 for i in itertools.permutations(x, len): if i == tuple(sorted(i)): print i