自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

pyb的博客

一个编程之路上的初学者

  • 博客(33)
  • 收藏
  • 关注

原创 python技巧(4)----python cookbook学习笔记

(1):使用re来进行字符串分解:(1):使用re来进行字符串分解:简单解释一下为什么要这样写,首先[]里面代表一个字符,但是如果我们不加后面的\s*,那么匹配到’,’之后后面的空白就会变成捕捉的内容,这是我们不需要的! line = 'asdf fjdk; afed, fjek,asdf, foo' re.split(r'[;,\s]\s*',line)另外如果里面有括号捕获分组,那么括号捕获的

2016-09-30 16:51:15 631

原创 python技巧(3)--python cookbook学习笔记

(1)命名切片(1)命名切片:通过切片命名我们可以避免硬编码,使得代码的可读性更好:Price = slice(3,5)#用来获取价格部分的切片price = items[Price]可以通过.indices方法可以适当的缩小边界避免越界:(2)Counter和most_common(2)Counter和most\_commonword_count其实就是将每一个元素映射到一个字典上,然后most

2016-09-30 12:29:01 649

原创 python技巧(2):--python cookbook学习笔记

(1):将一个16进制的数转换成xxxx.xxxx.xxxx.xxxx的形式。利用zfill这个函数以及bin().def convert(IP): bin_str = str.zfill(bin(int(IP,16))[2:],32) return '.'.join([str(int(bin_str[k*8:(k+1)*8],2)) for k in range(4)])(2):利

2016-09-29 00:13:10 609

原创 Leetcode:Next Permutation

此题不难,关键思路是找到某一个最大的i->nums[i],使得存在nums[k],k>i,大于nums[i]。然后将nums[i]的值与nums[k]交换后,并对nums[i+1:]排序。为了找到这个i,我们从右往左遍历,当第一个非递增的元素出现时,i就找到了。但是为了编程方便,我们可以先将nums[i+1:]排序,这样就知道大于nums[i]的最小元素是多少了。class Solution(obj

2016-09-27 21:40:47 292

原创 Leetcode:Substring with Concatenation of All Words

下面提供了两种算法解决这个问题:算法1:算法1:每遇到一个字母就查找它是不是属于首字母集合,若是则开始解析。解析的时候要注意某个单词的数量不能超过此数。一开始利用递归写的的解析函数超时了,改为循环后成功AC。class Solution(object): def findSubstring(self, s, words): def parse(start,d=0):

2016-09-26 23:43:04 332

原创 Divide two integer

class Solution(object): def divide(self, dividend, divisor): max_int = 2147483647 divd,divs = abs(dividend),abs(divisor) res = 0 while divd>=divs: a,i =

2016-09-25 23:07:43 552

原创 Leetcode. Reverse Nodes in k-Group

这题有两种解法,方法1:方法1:对于任意的k-group,利用O(k)的额外空间存储val,然后从两头开始遍历交换元素->逆转,最后返回一个结点。方法2方法2因为节点对插入操作的复杂度是O(1),我们每遇到一个节点,就将它插入到当前的首节点之后,这样时间复杂度都是O(n),空间复杂度是O(1)。class Solution(object): def reverseKGroup(self, h

2016-09-25 22:08:54 332

原创 leetcode:22. Generate Parentheses QuestionEditorial Solution

这个题以前在博客里面写过,第一种方法是利用dfs,第二种是采用动态规划的思路。因为lc的测试数据太少,体现不出第二种思路的优越性。class Solution(object): def generateParenthesis(self, n): result = [] def dfs(exp,n1,n2): if n1+n2==2*n:

2016-09-25 19:36:57 318

原创 Leetcode:17. Letter Combinations of a Phone Number QuestionEditorial Solution

这题很简单,直接dfs就过了。速度还很快.class Solution(object): def letterCombinations(self, digits): D = {'1':'','2':'abc','3':'def','4':'ghi','5':'jkl','6':'mno','7':'pqrs','8':'tuv','9':'wxyz'} res

2016-09-25 19:13:22 365

原创 Leetcode:正则表达式.

class Solution(object): def isMatch(self, s, p): print(s,p,'...') i,n = 0,len(p) if s=='':return p=='' or (len(p)>=2 and p[1]=='*' and self.isMatch('',p[2:])) if p==

2016-09-25 18:55:30 960

原创 Leetcode:Longest Palindromic Substring QuestionEditorial Solution

最长回文子串,利用动态规划可以解出来,复杂度是O(n^2),空间复杂度是O(n),因为我们可以用区间长度来进行动态规划,这样总是只需要3n的空间即可。base是size=1和0的情况,然后每次都增加1个长度,用长度为size-2的情况来分析。class Solution(object): def longestPalindrome(self, s): n = len(s)

2016-09-25 16:18:17 276

原创 Leetcode:Longest Substring Without Repeating Characters

这题目比较简单,遍历整个s,比较是否重复即可。class Solution(object): def lengthOfLongestSubstring(self, s): sub,t = set(),[] i,n,longest,L = 0,len(s),0,0 offset = 0 while i<n:

2016-09-25 13:37:57 261

原创 LeetCode:Median of Two Sorted arrays

给定两个有序的数组,求出这两个数组的中位数。这个题目最简单的解法就是直接合并然后求取,复杂度是O(m+n)的复杂度,但是这样是不能通过测试的。下面给出一个二分的思路来解决问题:分析分析:我们首先求取两个数组中第k大的元素,不妨假设从a中取前pa个元素,b中取前pb个元素。pa+pb=k,假如a[pa]>b[pb],那么我们知道两个数组合并后的序列中a[pa]一定位于b[pb]之后,这也说明b中的前p

2016-09-25 13:07:19 318

原创 Leetcode:Add two Numbers

首先要安装Hadoop,http://www.jianshu.com/p/3064cc63d507[0]首先注意java的环境变量设置,去官网下载jdk,然后还要在hadoop里面设置java的环境变量.[1]

2016-09-24 21:03:09 276

原创 Hadoop streaming编程学习(1):统计电影打分

首先需要安装hadoop:http://www.jianshu.com/p/3064cc63d507,注意需要先安装jdk,还要在java和hadoop里面都要设置好相应的环境变量.安装好之后就可以利用Hadoop Streaming进行编程了,首先要写好mapper和reducer文件,然后设置好相应的输入文件和输出文件。由于hadoop streaming是语言中立的,所以我们必须要从标准输入里

2016-09-24 09:36:41 782 1

原创 Leetcode:Largest Rectangle in Histogram

#class Solution(): def largestRectangleArea(self, heights): i,maxs = 0,0 s = [] heights.append(0) while i< len(heights): if len(s)==0 or heights[i]>heigh

2016-09-23 11:15:47 260

原创 PageRank算法的简单实现.

PageRank值可以看作是一个特殊矩阵A的特征向量,R = A*R,经过多次迭代R将会收敛。具体的数学分析请看Wiki.下面的代码实现了简单的PageRank算法,从一个图中读取网页节点的关系,然后将这种关系转换成为概率矩阵(也可以说是权重),然后利用快速求幂算法求出AnA^n,最后得到需要的A.中间利用了矩阵的转置等算法.全部用python手写,没有引入numpy.def create(q,gr

2016-09-21 08:58:40 2202

原创 最大映射问题

给定n个字符串,每个字符串的组成字母都属于A-J,然后我们需要确定一个映射使得A-J对应0-9并且所有字符串对应的整数加起来最大。另外每一个字符串都不允许有前置0。分析分析:题目比较简单,我们分析每一个字符串中每一个字母的权重(1,10,100…),然后将所有字母的权重加起来,按照权重进行排序这样就可以获得最大映射的序列。但是由于题目要求不能有前置0,所以如果出现的字母种类达到10种,那么就需要找到

2016-09-20 10:21:08 779

原创 leetcode-4sum问题

题目大意是:给定一个长度为N的数组,求解里面有多少4元组(a,b,c,d)的和满足给定的target,注意四元组不能够重复(1,2,3,4)和(2,1,3,4)算同一种!分析:这个题目用C++跑O(n^3)的算法是可以过的,但是我们可以找到一种更简单的方法来解决问题。首先计算所有二元组(i,j)对应的nums[i]+nums[j]的和并且存储起来。然后将这个问题转换成为一个2sum的问题即可。下面是

2016-09-19 08:32:43 422

原创 TCP学习:抓包分析(1)

接着上一次的学习,今天利用抓包工具和几个代码进行了抓包分析。首先从github上下载一个server和client的简单程序。然后运行tcpdump进行抓包分析。(1)(1)客户端与服务器建立连接时启动三次握手:抓到的包如下:分析:分析:[1]第一个包由client发出,很容易看见tcp首部给出了原端口:0xcdb8=52664,目的端口是7777。它的6个控制位是000010,这代表只有SYN是有

2016-09-18 15:50:26 531

原创 A-priori算法的简单实现

A-priori算法是一种先验算法,经常用于数据挖掘里面寻找关联的子集。我们给定一个数据的集合{{1,2,3},{1,2,3,5,4}…{11,19,28}},需要寻找同时出现次数超过s次的k元集合(x1,x2...xk).(x_1,x_2...x_k).其基本核心思路如下:1:首先寻找出现次数超过s次的一元集合,由于这样的集合不会超过元素的总数,一般可以直接计算出来,利用字典(或其他hash结构)

2016-09-17 14:48:24 2053

原创 求解最长单调子序列.

给定一个长度N的子序列,求出一个单调递增的最长子序列长度,子序列可以不连续。这道题我暂时只找到了O(N^2)复杂度的算法:可以把问题看作一个简单的DP问题。假设result[k]是代表以第k个元素作为结尾的某一个单调子序列的长度,那么对于第k+1个元素结尾的单调子序列,可以这样计算result[k+1]=max(1+result[i])wherearray[i]<array[k+1],ifrom0t

2016-09-17 12:19:23 610

原创 数字到字符串转换问题

将1->A,2->B,….26->Z,27->AA,52->AZ.容易看出来这是一个26进制转换的问题,但是需要注意一点,我们人为的舍弃了0对应的字母,为了与进制转换联系起来,将所有数字减1就变成0-25对应A-Z。def convert(num): string = '' while num: string = (chr(ord('A')+ ((num-1)%26)

2016-09-15 17:47:58 448

原创 使用C++11进行多线程归并排序:std::thread

相对于使用pthread来说,c++的标准库对多线程的编程封装的非常好,使用起来有如下几个优势:1:1:可以直接传递参数给函数,而不需要将它封装到一个结构体再转换成为void*传入。22:对于目标函数的要求不再是void*的返回类型,这样如果要使用一些内置的函数,就不需要进行单独封装成void*类型。==================================================

2016-09-12 20:57:07 3217

原创 UDP学习:抓包分析

首先下载一份代码,用来发送数据包git clone http://git.shiyanlou.com/shiyanlou/tcp_ip_5然后对这份文件里面的代码进行编译然后安装一个抓包工具tcpdump,并且运行,监视7777端口。sudo apt-get updatesudo apt-get install tcpdumpsudo tcpdump -vvv -X udp port 7777

2016-09-12 18:54:45 10192 2

原创 算法竞赛入门第七章:习题

uva208本题相对简单,只要提前从k做一次bfs,这样可以判定是否某个节点与k相连。然后开始进行dfs,注意这里的dfs需要将整个解答树展开完毕。def search(graph,k): def find_connect(): connects = set([k]) q = deque() q.append(k); while

2016-09-11 22:52:02 319

原创 Linux下的gdb调试学习

(1)使用gdb首先编译,然后使用gdb命令运行编译生成的文件。(2)现在有几个常用命令:list,run,step,next,continue,break,bt,where。(3)break命令用来进行断点设置,break i,代表对当前文件第i行进行设置。 break 文件名: i,对某个文件第i行设置断点。 break 文件名: 函数名,对某个文件第的某个函数设置断点。 break 函数

2016-09-09 16:05:38 325

原创 C++:多线程编程学习:利用多线程进行归并排序。

#include <pthread.h>#include <iostream>#include <fstream>#include <string>#include <vector>#include <cstdlib>#include "unistd.h"using namespace std;#define NUM_THREADS 5vector<int> read_file(str

2016-09-08 20:24:43 3266

原创 坐标的旋转,翻转

因为一个旋转的变换是(x,y)->(y,-x),所以只需要三次连续旋转就可以获得所有的旋转。而翻转的类型则是(x,y)->(x,-y),翻转之后再旋转则得到另外的图形。如果给定了相应的坐标范围,则要注意旋转之后会超过坐标范围,因此需要利用平移将图形移回定义的坐标系。注意,这也是一个小技巧,不管一个图形的位置如何,我们都可以将它标准化到坐标系的左上角,这样就消除了平移的影响。下面的代码还加上了去掉重复

2016-09-06 23:12:26 4400

原创 算法竞赛入门第七章:竞赛选讲(Uva12325,Uva1603)

宝箱Uva12325:宝箱 Uva12325:这道题很有思维强度,首先比较容易想到的是枚举宝箱的数量,从0到[n/s1]或者0到[n/s2]。但是由于输入很大,当s1,s2都很小的时候,那么枚举的数量将会非常的巨大。因此针对s1,s2较小而n很大的情况,需要提供另一种思路。另一种枚举的思路是从s1,s2入手的。因为s1,s2很小,如果枚举的数量和他们成正相关,那么就可以确保枚举的效率。考虑一个事实:

2016-09-06 11:29:32 1176

原创 算法竞赛入门第七章:迭代加深搜索

埃及分数问题,对于任意分数ab\frac{a}{b},都可以写成∑1xi。其中xi互不相同。需要求出一个组合,其中项数最少。若项数一致,则需要最小的分数最大\sum\frac{1}{x_{i}}。其中x_i互不相同。需要求出一个组合,其中项数最少。若项数一致,则需要最小的分数最大思路分析:思路分析:理论上来说,回溯法可以暴力解决问题,但是解答数的项数太多,广度和深度都是无限的。对于稍微复杂一点的数据

2016-09-03 19:59:30 1905

原创 重载自己的流并实现格式

在实际应用中,有时候需要对流的输出格式进行设定。比如说,需要对文件流中内置类型之间加上分隔符。而在输出到终端则加上空格。对文件流则有其他的格式要求。为每一种流都定义一个格式的输出太麻烦,而且对已经封装好的类则不可以去内部修改它们的输出操作符。因此,我们需要定义一个包装过的流类型,它通过模板参数接受一个内置的流,然后对不同的内置类型执行相应的输出操作。(1)(1)为了方便起见,我们还需要对std::e

2016-09-02 10:53:58 334

原创 确定任意可重复集合某一排列的字典序

(1)(1)首先考虑某一个不重复集合的排列字典序。这很容易比较,只需找出有多少种排列小于它既可。从第一个元素x开始遍历,不妨假设后面的元素有i个小于x,那么一共有x*(n-1)!种情况。假如没有,则需要保持第一个元素不动,类似的方式判断第二个元素。最后将所有的种类加起来既可(2)(2)假如有重复的元素,那么问题将会变得复杂很多。按照(1)的思路继续,我们假设第一个x后有j个元素小于x,那么我们必须要

2016-09-01 12:40:59 502

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除