一些经典题型----数据结构与算法

1.找到链表倒数第k个节点

假设一共链表长度为 x, 倒数第k个节点就是正数第 x-k+1个节点
所以,方法

     在起点设置两个指针a,b
     当 a 走到第 k-1个节点时,b 开始走
     当 a 走完整个链表时,b 所处位置就是倒数第k个节点位置
     a,b速度相同

2.获得子符串的所有字串

             def cut(s):
                 results = []
                 leng = len(s)
                 for i in range(leng):
                     for j in range(leng - i):
                         results.append(s[j:i + j + 1])
                 print(results)


             cut(input())

输入 abc
输出 a,b,c, ab, bc, abc

3.小米笔试

比如,输入

       abcdefgh  7
       输出
       abcdefg
       h000000

算法

        all_str = input()
		b = []
		all = all_str.split(' ')
		str = all[0]
		leng = int(all[-1])
		if len(str) % leng == 0:
			duan = len(str)//leng
		else:
			duan = len(str)//leng+1
		j = 0
		y = leng## 标题
		for i in range(duan):
			t = str[j:y]
			j += leng
			y += leng
		b.append(t)
		fina = len(b[-1])
		for i in range(leng-fina):
			b[-1] += '0'
		for i in b:
			print(i)

4.对称加密和非对称加密

        对称加密:DES算法,3DES算法,TDEA算法,Blowfish算法,RC5算法,IDEA算法
        非对称加密:RSA算法

5.Python的内存管理机制

       分为对象缓冲池和内存池
       Python中的内存管理机制的层次结构提供了4层,其中最底层则是C运行的malloc和free接口,
       往上的三层才是由Python实现并且维护的。

上面三层分别是 block,arena,pool,usedpool 组成内存池

注意,内存大小以256字节为界限,大于则通过malloc进行分配,小于则通过内存池分配
垃圾回收采用引用计数法

          即创建时计数1,调用、复制加一,引用被销毁减一,为0时回收,释放内存
          del()
          优点:实时性高
          缺点:效率低,可能会导致内存泄露(循环引用)

标记–清除

          效率不高

分代回收

                  原理:将系统中的所有内存块根据其存活时间划分为不同的集合,每一个集合就成为一个“代”,
               Python默认定义了三代对象集合,垃圾收集的频率随着“代”的存活时间的增大而减小。
               也就是说,活得越长的对象,就越不可能是垃圾,就应该减少对它的垃圾收集频率。
               那么如何来衡量这个存活时间:通常是利用几次垃圾收集动作来衡量,
               如果一个对象经过的垃圾收集次数越多,可以得出:该对象存活时间就越长。

6.osi七层模型作用

         应用层:提供应用程序间的通信
         表示层:数据编码、翻译
         会话层:建立、维护、中止会话
         传输层:建立主机端到端连接
         网络层:逻辑编址、寻址
         数据链路层:介质访问、链路管理
         物理层:介质、接口标准、比特流

附:Web页面请求过程

        url输入---DNS域名解析---建立TCP连接---形成HttpRequest请求
        ---Nginx反向代理---服务端处理请求---关闭TCP连接---返回渲染页面

7.约瑟夫环问题

                nums = 40
				call = 5
				# 参数定义:
				peoples = [True for i in range(nums)]
				result = []
				num = 1

				while (any(peoples)):
					for index, people in enumerate(peoples):
    					if people:
        					if num == call:
            					peoples[index] = False
            					result.append(index + 1)
            					num = 1
        					else:
            					num += 1

				print('\n总数为%d,报数为%d' % (nums, call))
				print('约瑟夫序列为:\n%s\n' % result)

8.获取字符串中的数字

                d = []
				a = input()
				for i in a:
					try:
    					if int(i):
        					d.append(i)
					except:
    					d.append('')
				d = ''.join(d)
				print(d)
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值