python剑指网络篇一】的更多相关文章

#coding:utf-8 __author__ = 'similarface' #!/usr/bin/env python import socket #二进制和ASCII互转及其它进制转换 from binascii import hexlify def get_remote_machine_info(remote_host): ''' 获取根据域名获取IP地址 :param remote_host: 域名 :return:IP地址 ''' try: #SimilarFacedeMacBoo…
在socket编程中 AF_INET 对应 IPv4 SOCK_STREAM 对应 TCP SOCK_DGRAM 对应 UDP…
>>> #获取hostname ... >>> host_name=socket.gethostname() >>> print "%s" %host_name SimilarFacedeMacBook-Pro.local >>> #获取IP地址 ... >>> socket.gethostbyname(host_name) '192.168.30.120' #获取远程机器的IP,类型于ping…
题目: 一个链表中包含环,请找出该链表的环的入口结点. 思路: 先说个定理:两个指针一个fast.一个slow同时从一个链表的头部出发, fast一次走2步,slow一次走一步,如果该链表有环,两个指针必然在环内相遇, 此时只需要把其中的一个指针重新指向链表头部,另一个不变(还在环内), 这次两个指针一次走一步,相遇的地方就是入口节点. python solution: # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x…
题目描述: 输入n个整数,找出其中最小的K个数.例如输入4,5,1,6,2,7,3,8这8个数字,则最小的4个数字是1,2,3,4,. 思路: 使用快排中的partition思想. ①我们设定partition函数的哨兵为key=lists[left],在partition函数中完成一轮比较的结果是,比key大的数都在其右边,比key小的数放在其左边.完成该轮后返回其left=right时left的值. ②我们判断left的值是比k大还是小: 如果left的值比k大,说明上轮partition之…
题目描述 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字.例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}.由于数字2在数组中出现了5次,超过数组长度的一半,因此输出2.如果不存在则输出0. 思路: 第一种思路: 出现次数超过一半的数字,不管如何,必然这个数字位于数组中间的位置,因此可以采用类似于快排的划分的方法,找到位于数组中间的位置的数字,然后在顺序检索是否这个数字出现次数超过一半. def function_partion(lists, left, right…
题目描述 输入一颗二叉树的跟节点和一个整数,打印出二叉树中结点值的和为输入整数的所有路径.路径定义为从树的根结点开始往下一直到叶结点所经过的结点形成一条路径.(注意: 在返回值的list中,数组长度大的数组靠前) # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: # 返回二维列…
题目描述 定义栈的数据结构,请在该类型中实现一个能够得到栈中所含最小元素的min函数(时间复杂度应为O(1)). # -*- coding:utf-8 -*- class Solution: def __init__(self): self.stack = [] self.min_stack = [] def push(self, node): # write code here self.stack.append(node) if not self.min_stack or node <= s…
题目描述 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下4 X 4矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2,3,4,8,12,16,15,14,13,9,5,6,7,11,10. # -*- coding:utf-8 -*- class Solution: # matrix类型为二维列表,需要返回列表 def printMatrix(self, matrix): # write code her…
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) # -*- coding:utf-8 -*- # class TreeNode: # def __init__(self, x): # self.val = x # self.left = None # self.right = None class Solution: def HasSubtree(self, pRoot1, pRoot2): # write code here if not…
题目描述 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. # -*- coding:utf-8 -*- # class ListNode: # def __init__(self, x): # self.val = x # self.next = None class Solution: # 返回合并后列表 def Merge(self, pHead1, pHead2): # write code here if pHead1 == None: re…
题目 给你一根长度为n的绳子,请把绳子剪成m段 (m和n都是整数,n>1并且m>1)每段绳子的长度记为k[0],k[1],…,k[m].请问k[0]k[1]…*k[m]可能的最大乘积是多少?例如,当绳子的长度为8时,我们把它剪成长度分别为2,3,3的三段,此时得到的最大乘积是18. 解题思想 动态规划(具体解法及思路见代码注释) class Solution(): def maxProfuctAfterCutting(self,length): if length < 2: return…
网络篇 1.简述 OSI 七层协议 物理层:定义物理设备标准,如网线的接口类型.光纤的接口类型.各种传输介质. 数据链路层:定义如何传输格式化数据,以及如何访问物理介质. 网络层:定义逻辑网络地址. 传输层:定义传输协议和端口. 会话层:定义客户端与服务端的连接. 表示层:定义数据格式转换,对来自应用层的数据进行解释. 应用层:定义应用程序. 2. 什么是C/S和B/S架构? c/s架构,就是client(客户端)与server(服务端)即:客户端与服务端的架构. b/s架构,就是brosver…
数组中重复的数字 在上一篇博客中<剑指Offer>-- 题目一:找出数组中重复的数字(Python多种方法实现)中,其实能发现这类题目的关键就是一边遍历数组一边查满足条件的元素. 然后我们在博客用最复杂的方式学会数组(Python实现动态数组)这篇博客中介绍了数组这一结构的本质,并自己动手实现了一个动态数组. 今天我们介绍一下另一道来自<剑指Offer>的关于数组的面试题--不修改数组找出重复的数字. 不修改数组找出重复的数字 题目二:不修改数组找出重复的数字 给定一个长度为 n+…
数组中重复的数字 最近在复习算法和数据结构(基于Python实现),然后看了Python的各种"序列"--比如列表List.元组Tuple和字符串String,后期会写一篇博客介绍 数组 这一数据结构. 不过我们先来看<剑指Offer>中关于数组的一道面试题. 面试题3:数组中重复的数字 题目一:找出数组中重复的数字 给定一个长度为 n 的数组里的所有数字都在 0∼n−1 的范围内. 数组中某些数字是重复的,但不知道有几个数字重复了,也不知道每个数字重复了几次. 请找出数组…
python高级之网络编程   python高级之网络编程 本节内容 网络通信概念 socket编程 socket模块一些方法 聊天socket实现 远程执行命令及上传文件 socketserver及其源码分析 1.网络通信概念 说到网络通信,那就不得不说TCP/IP协议簇的OSI七层模型了,这个东西当初在学校都学烂了...(PS:毕竟本人是网络工程专业出身...) 简单介绍下七层模型从底层到上层的顺序:物理层(定义物理设备的各项标准),数据链路层(mac地址等其他东西的封装),网络层(IP包头…
<剑指Offer>是很多程序员面试前要看的书,但里面的算法都是基于C++实现的,最近用了三周左右时间,用Python完成了里面几乎所有的算法题,由于时间以及个人水平均有限,或许会有部分问题没有发现,希望大家发现后能指出,在此感谢大家!也希望我写的东西能对大家有一点帮助.所有源代码请在这里获取. Python-Offer的主要特点简介如下: 所有题目按照书中章节排列,便于查询: 每个题目单独一个文件,文件可以直接运行,便于测试以及查看结果: 作为2的补充,对于二叉树和单链表这种类型的题目,文件中…
剑指Offer--知识点储备-网络基础 计算机网络 http和https的区别 (1)http是http协议运行在tcp之上,所传输的内容都是明文,客户端和服务器端都无法验证对方的身份. (2)https是http协议运行在SSL/TLS之上,SSL/TLS运行在tcp之上.所有传输的内容都经过加密.加密采用对称加密,但对称加密的秘钥用服务器方的证书进行非对称加密,此外客户端可以验证服务器端的身份,如果配置了客户端验证,服务器方也可以验证客户端的身份. (3)https协议需要到CA申请证书,一…
使用python实现<剑指offer>面试题ヾ(◍°∇°◍)ノ゙,以此记录. 2_实现Singleton模式 题目:实现单例模式 单例模式,是一种常用的软件设计模式.在它的核心结构中只包含一个被称为单例的特殊类.通过单例模式可以保证系统中,应用该模式的一个类只有一个实例.即一个类只有一个对象实例. 原理:使用模块时,第一次导入会生成.pyc文件(存放相应目录下的__pycache__文件夹内),当第二次使用该模块时会直接加载pyc文件.所以,将函数.数据等定义在一个模块中即可完成一个单例对象.…
题目描述 请实现一个函数用来找出字符流中第一个只出现一次的字符.例如,当从字符流中只读出前两个字符"go"时,第一个只出现一次的字符是"g".当从该字符流中读出前六个字符“google"时,第一个只出现一次的字符是"l".如果当前字符流没有存在出现一次的字符,返回#字符. 思路 和前面的那道字符串中只出现一次的字符相似而不相同,前面那道是固定长度字符串,而本题是字符流,也就是会增长的,每次字符串多一个字符,就要重新判断是哪个只出现一次的…
[剑指Offer]合并两个排序的链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. Ways 合并两个有序的链表,暴力解法肯定不可取.可以采用下面的这个做法,很通用. # Definition for singly-linked list. # class ListNode…
[剑指Offer]反转链表 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 输入一个链表,反转链表后,输出链表的所有元素. Ways 这个题就是[LeetCode]Reverse Linked List 解题报告这个题.思路也一样. 用temp保存pHead的下一个节点.用newHead保存新的节点的开头.然后把pHead.next只想newHead,再移动一下 三个…
[剑指Offer]链表中倒数第k个节点 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 输入一个链表,输出该链表中倒数第k个结点. Ways 这个题的做法大家应该都知道了,就是使用两个指针,走在前面的指针比走在后面的指针优先k-1步,这样当走在前面的指针走到头的时候,走在后面的指针正好到了倒数第k个节点. 需要注意的是代码的鲁棒性.有以下三点: 头结点不存在 k为0…
[剑指Offer]数值的整数次方 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 给定一个double类型的浮点数base和int类型的整数exponent.求base的exponent次方. Ways 方法一: 使用循环去做. 题目中已经明确了exponent是整数.这里要考虑的是整数可能是0或者负数. 当其是正数的情况很简单,直接循环就能搞定. 当其为负数的时候,…
[剑指Offer]字符串的排列 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: 输入一个字符串,长度不超过9(可能有字符重复),字符只包括大小写字母. Ways 很多人使用pytho…
[剑指Offer]矩阵覆盖 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? Ways 还是费布拉奇数列.主要是明白这个思想呀-递推公式很简单. # -*- coding:utf-8 -*- class Solution: def __ini…
作者: 负雪明烛 id: fuxuemingzhu 个人博客:http://fuxuemingzhu.cn/ 个人微信公众号:负雪明烛 目录 题目描述 解题方法 动态规划 日期 题目地址:https://leetcode-cn.com/problems/qing-wa-tiao-tai-jie-wen-ti-lcof/ 题目描述 一只青蛙一次可以跳上1级台阶,也可以跳上2级台阶.求该青蛙跳上一个 n 级的台阶总共有多少种跳法. 答案需要取模 1e9+7(1000000007),如计算初始结果为:…
[剑指Offer]旋转数组中的最小数字 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 把一个数组最开始的若干个元素搬到数组的末尾,我们称之为数组的旋转. 输入一个非递减排序的数组的一个旋转,输出旋转数组的最小元素. 例如数组{3,4,5,1,2}为{1,2,3,4,5}的一个旋转,该数组的最小值为1. NOTE:给出的所有元素都大于0,若数组大小为0,请返回0. W…
[剑指Offer]树的子结构 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) Ways 需要两个函数,一个用来判断是不是子结构,另外一个是用来进行初始化. 判断是否是子结构的时候,如果当前值相等,需要进行左右值是否相等的判断:如果当前值不等,则判断Root1的左右子树是否包含R…
[剑指Offer]二叉树的镜像 解题报告(Python) 标签(空格分隔): LeetCode 题目地址:https://www.nowcoder.com/ta/coding-interviews 题目描述: 题目描述 操作给定的二叉树,将其变换为源二叉树的镜像. 输入描述: 二叉树的镜像定义: 源二叉树 8 / \ 6 10 / \ / \ 5 7 9 11 镜像二叉树 8 / \ 10 6 / \ / \ 11 9 7 5 Ways 反转二叉树的左右节点,其实直接反转就好了.注意哈,从根节点…