第一题很简单,忘了是什么题了。

第二题:验证报文

难点在于进制的转换和输入输出,python对于十六进制的存储是0x__,比如5就是0x5,而C和C++就是5,这里稍有不同,当时我摸不清python版本的输入格式到底是什么,因为python只能用readline()的形式直接从命令行得到整条输入,再进行解析,这里就纠结到底是0x5还是5,想的脑子疼,(笔试结束后朋友提醒牛客网好像可以输出样例输入),就没写这道题。

题目:报文流T由报文组成,每个报文以十六进制存储,开始符是5a,结束符也是5a,在结束符之前,用一个字节来存储报文长度域(不包含开始、结束以及长度域本身),报文内如果遇到5a,5b两种字符,转义成5b ba和5b bb,但长度不变。两个报文合并时,可以将中间的5a省去一个,用一个5a同时作为上一个报文的结束符和当前报文的开始符。

例如5a 06 5b ba 37 5b bb 44 05 5a 12 34 5b ba 03 5a报文流由两个报文组成

1:5a 06 5a 37 5b 44 05 5a

2:5a 12 34 5b 03 5a

问题:现在有一个报文流,里面有部分报文是错误的,(可能是没转义,可能是长度域错误等),需要剔除错误的报文,并返回剩余正确的报文流。

思路:

一:一个十六进制占1个字节,先将输入的十六进制数据流转为整数存在数组里(考察输入)

二:遍历,将两个5a之间的数组放进子函数,子函数计算这个数组的长度(注意将转义字符看做一个字节),跟长度域比较,不相等就不管,相等就放入结果数组里,

三:将结果数组按照十六进制输出即可。(这里注意结果要补0,5要输出成05,用print('02x'%input)即可)

挺可惜,我当时被输入输出整的有点烦,也是因为LeetCode并不需要处理输入输出,所以平时练得实在不多。

第三题:最优子序列

题目:现有一个序列长度为m,我们要将其分解成k个子序列,1<=k<=m<=500,序列由整数组成,整数小于10^7。要求这k个子序列和的最小值尽可能大,在有多解的情况下,优先s(1)序列最大,如果s(1)相同,则s(i+1)依次往下排。

例如:

100 200 300 400 500 600 700 800 900

k=3的情况

我们需要输出: 100 200 300 400 500 / 600 700 / 800 900

这样的划分是最优的,最小值600+700=1300是能划分的最大值

思路:

这里很重要的是我们需要找出那个最优的最小值来划分序列。查找自然就要用二分查找法啦,令X为我们要找的划分值,那么我们需要用二分来找X。二分查找自然需要low和high,这里low=0无疑问,数组和最大值为500*10^7,所以high就是5e9。

那么如何判定一次二分之后mid该往哪边去呢?

试想,我们构建一个函数f,使得x能划分时,f(x)=1,不能划分时f(x)=0,那么我们需要找的X正好就是这个函数定义域的分界点,任何xX使得f(x)=0,所以mid往哪边走,由函数f返回值来确定。

接下来构建函数f。首先,我们根据x来划分序列,每个子序列必须要大于x。f(x)=0时,也就是x太大,最后划出来区域数量小于k。f(x)=1,则x存在,可以划分出k个区域(并不保证最优,但保证存在)

上代码

def make_parts(a,k,x):

parts=[]

num_part=0

i=len(a)-1

#从后往前遍历,目的是保证前面的子序列和能更大

while i>=0:

tmp_sum=0

part=[]

j=i

#划分子区域

while j>=0 and tmp_sum=0:

part.append(a[i])

i-=1

parts.append(part)

#x偏大,不能划分k个区域

if num_part

子函数构建完成,外面套个二分查找即可,查找到最优值X后,再用子函数分一次X就是答案。

华为2021届软件测试笔试题,华为2021届软件类校园招聘笔试题题解相关推荐

  1. 华为2021届软件类校园招聘笔试题题解

    第一题很简单,忘了是什么题了. 第二题:验证报文 难点在于进制的转换和输入输出,python对于十六进制的存储是0x__,比如5就是0x5,而C和C++就是5,这里稍有不同,当时我摸不清python版 ...

  2. 百度2014研发类校园招聘笔试题解答

    http://blog.csdn.net/lanxuezaipiao/article/details/42915285 先总体说下题型,共有3道简答题,3道算法编程题和1道系统设计题,题目有难有易,限 ...

  3. 百度2014研发类校园招聘笔试题

    先总体说下题型,共有3道简答题,3道算法编程题和1道系统设计题,题目有难有易,限时两小时完成. 一.简答题 动态链接库和静态链接库的优缺点 轮询任务调度和可抢占式调度有什么区别? 列出数据库中常用的锁 ...

  4. 2014届华为校园招聘机试题

    华为2014校园招聘的机试题目和2013年的完全一样. 一.题目描述(60分): 通过键盘输入一串小写字母(a~z)组成的字符串.请编写一个字符串过滤程序,若字符串中出现多个相同的字符,将非首次出现的 ...

  5. 2015华为校园招聘机试题一

    2015华为校园招聘机试题<一> 今天无意之间看到了2015年华为校园招聘的机试题,于是,做了下,写出来与大家共享.先看第一题: 题目如下: 按要求分解字符串,输入两个数M,N:M代表输入 ...

  6. 2012九月十月腾讯,网易游戏,百度最新校园招聘笔试题

    十月下旬腾讯,网易游戏,百度最新校园招聘笔试题集锦(第271-330题) 引言 此文十月百度,阿里巴巴,迅雷搜狗最新面试十一题已经整理了最新的面试题70道,本文依次整理腾讯,网易游戏,百度等各大公司最 ...

  7. 软件开发工程师招聘笔试题面试题223套和招聘考察内容

    技术族职业发展通道\阶梯\标准(即招聘考核内容) (1) 通道 技术族分为软件研发.美术.质量管理.设计.技术支持五个职业发展通道,每个发展通道包含下列职位(具体内容请见表4-技术族发展通道职位列表) ...

  8. 2005年中兴软件校园招聘笔试题

    2005年中兴软件校园招聘笔试题 第一部分    数据结构和算法 1.      假设执行语句S的时间为O(1),则执行下列程序短的时间为() for(i=1;i<=n;i++) for(j=I ...

  9. 2014 WAP校园招聘笔试题

    2014 WAP校园招聘笔试题 Problem's Link:   http://www.doc88.com/p-6751117015483.html WAP公司笔试题 We are planning ...

最新文章

  1. 智能机器人与系统高精尖创新中心2018年度开放基金项目申报通知
  2. Cheat—— 给Linux初学者和管理员一个终极命令行备忘单
  3. extjs用iframe的问题
  4. [转载]JAVA实现鼠标右键功能
  5. Shallow and retained sizes
  6. echarts 环形图 默认高亮展示某个数据
  7. 访问数据库_Lua 数据库访问
  8. vscode怎么安装python包_vscode如何安装python
  9. (转)Android属性动画完全解析(中),ValueAnimator和ObjectAnimator的高级用法
  10. 如何开启jvm日志_直通BAT必考题系列:JVM性能调优的6大步骤,及关键调优参数详解...
  11. leetcode题解191-位1的个数
  12. 全局变量不能放在头文件其中
  13. jdbc、jpa、spring data jpa、hibernate、mybatis之间的关系及区别
  14. 微信,支付宝,银行卡提现功能简述
  15. npz文件转为npy_numpy 文件存取 npy、npz
  16. kinectfusion解析_KinectFusion 介绍
  17. 计算功耗设备待机时间!
  18. python基础编码规范_Python语言的基本语法和编码规范.ppt
  19. H3C设备查看信息命令
  20. 值得看三次的高干文_七本值得刷10遍的高干文,本本经典,让你一次看过瘾!...

热门文章

  1. MySQL-DML、DQL、DCL
  2. 如何合理的设计B端产品经理的考核目标?
  3. 计算器的M+是什么意思
  4. SAP Fiori应用索引大全工具和 SAP Fiori Tools 的使用介绍
  5. 山西台达plc可编程控制器_什么是PLC,什么是可编程控制器,快速了解PLC常识和应用...
  6. Spring Data Commons主要梳理
  7. Win10 Python yt-dlp下载youtube视频 | 安装使用详细教程
  8. 操作系统——Process Synchronization 进程同步
  9. 未来换电站的一些想法
  10. linux/git命令