LINJING BI

biubiubiu...


  • 首页

  • 关于

  • 标签

  • 分类

  • 归档

Socket网络编程-Notebook

发表于 2018-12-02 | 分类于 socket网络编程

Socket

一、概述

socket通常也称作套接字,用于描述IP地址和端口,用于连接应用层与传输层。

socket网络编程流程见下图:
socket1

leetcode 58 最后一个单词的长度

发表于 2018-11-20 | 分类于 leetcode

题目:

给定一个仅包含大小写字母和空格' '的字符串,返回其最后一个单词的长度。如果不存在返回0
例子:
输入:'Hello World’
输出:5

这个例子用python的str.split()很简单,只是想强调一下,当str为空或者全是’ ‘时,得到的列表也为空,此时不能用[-1]找最后一个元素。还有,如果a不为空或者全’ ‘,而是一个单一字符组成的字符串,a.split(‘该单一字符’)得到的列表为[‘’ for i in range(len(a)+1)],而不是一个空列表。

阅读全文 »

leetcode 6 ZigZag变换

发表于 2018-11-20 | 分类于 leetcode

题目:

将字符串’PAYPALISHIRING'以Z字型排列成给定的行数,然后逐行读取字符:
例子:
行数为3
P  A   H   N
A P L S I I G
Y    I   R
输出:
'PAHNAPLSIIGYIR'

例如第二行的,P L,他们是字符串的第3,5,此时row是2x3-2=4,那么可以看出 3 % 4 = 3, 5 % 4 = 1,3 + 1 = 4 = 2 numrows -2 。他们都属于a[1],所以可以用2numRows - 2 - row,来求出3的行数。

阅读全文 »

python @装饰器

发表于 2018-11-20 | 分类于 python

几个概念

装饰器的用处是不需要大批量修改某函数就能实现为其增添功能。装饰器满足两点要求:

  1. 不能修改被装饰函数的源代码
  2. 不能修改被装饰函数的调用方式

在讲解装饰器之前,我们还需要明白几个表达方式。对一个函数test1()来说:

  1. test1表示的是函数的内存地址
  2. test1()就是在调用在test1这个地址的内容,也就是在调用函数

现在正式开始介绍装饰器的用法。

阅读全文 »

Dijkstra 找最短路径

发表于 2018-11-16 | 分类于 数据结构

寻找加权图G中src点到图中其他可抵达点的最短路径。我们用适应性强的优先队列去实现最小值提取,队列的选择有两种选择:
1.堆O((n+m)logn)
2.未排序的序列O(n^2)
当边的数量很少(m<n^2/logn)用堆,反之序列。
下面的代码中我们用堆实现。

阅读全文 »

可适应性优先级队列(基于堆)

发表于 2018-11-16 | 分类于 数据结构

由于传统的堆并不支持对堆中除头和尾以外的位置的增删改,而在实际情况下我们需要对其他节点进行操作。这里我们在堆原有数据结构基础上进行扩展,
用’定位器‘来实现对堆中其他元素的定位。定位器是指在堆原有节点类中加入一个新属性_index(节点在底层数据结构数组中的秩),然后实列化节点类(locator),
并返回给用户用来定位每一个节点。

阅读全文 »

leetcode 25 k个一组反转链表

发表于 2018-11-16 | 分类于 leetcode

题目:

给出一个链表,每k个一组进行翻转,并返回翻转后的链表。
如果节点总数不是k的整数倍,那么将剩余节点保持原序返回。
例子:
    给出:1->2->3->4->5, k=3
    输出:3->2->1->4->5
说明:
    1. 你的算法只能使用常数的额外空间
    2. 不能单纯的改变节点的值,需要对实际节点进行交换

首先要判断链表长度是否大于k,然后再进行分组翻转。由于会有剩余部分,不要忽略翻转完毕后对剩余部分的重新连接。

阅读全文 »

leetcode 92 反转m到n的链表

发表于 2018-11-14 | 分类于 leetcode

题目:

反转从位置m到n的链表。请使用一趟扫描完成反转。(1<=m<=n<=lenofthelist)
例子:
    input:1->2->3->4->5->NULL, m=2, n=4
    output: 1->4->3->2->5->NULL    

首先记录m-1的节点(front),然后依次倒置[m,n]之间的节点,期间还要注意m节点的收藏(tail),用来设置tail.next=back,然后记录n+1(back)节点,最后完成n+1,m-1连接。由于倒置是通过不停的选择next节点来完成,为了防止陷入死循环,本次节点(cur)与本次节点next节点(temp)的关系倒置要放到下一次循环中处理,这就需要我们引入pre来记录本次节点。
简而言之,介于[m,n]间的单次循环要完成两项任务:1. 设置temp 2. 完成cur.next = pre。
另外,几个需要注意的小细节,这里的m,n指的是位置,不是类似于数组的秩,是从1开始的。所以在循环倒置时,i也应先加1,表示此次是对第一个位置操作。
代码来源

阅读全文 »

HEXO部署到GitHub.io搭建个人博客

发表于 2018-11-13

install git

install Node.js

1
curl https://raw.github.com/creationix/nvm/v0.33.11/install.sh | sh

Close and reopen your terminal to start using nvm or run the following to use it now:

1
2
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm

1
nvm install stable
阅读全文 »
12

Bi

19 日志
7 分类
24 标签
RSS
GitHub E-Mail
Links
  • PIPIJI's COOP
© 2018 — 2019 Bi
由 Hexo 强力驱动
|
主题 — NexT.Mist v5.1.4