2023-4-29 华为od机试题

三题分值100,100,200
1.题目描述:给你一个单向链表,输出该链表的中间节点的数据,如果有两个中间节点,那么输出后一个节点的数据
输入:第一行headAddress,头结点的地址
后面的每行数据以address data nextAddress 的形式
输出:中间节点的数据
链表没有环,不是所有节点都在链表中,尾节点的nextAddress是-1。

思路:数据放在一个List<String[]>集合 数组大小是3 下标0,1,2分别放地址数据和下一个节点的地址,然后遍历集合一个一个找下一个节点然后放到另一个集合,最后输出中间节点直接list.get(size/2),遍历集合使用递归写的,每次找到一个就把找到的数据删除用新的地址和集合继续遍历找。结果就是运行超时了。后来看了一下题目,最后一个节点nextAddress是-1,那就可以从收尾两端同时遍历了,集合存尾节点遍历的结果,设置好递归结束的条件就行,最后输出第二个结果集的尾元素
通过率第一次提交在80%,第二次运行有点问题没通过。也没有继续纠结了,开始做下一题。

2.题目描述:大概意思就是有一些日志需要你提交,提交规则:1.每提交一条日志奖励一分。2.每延迟一秒提交扣一分。3.日志满一百条必须马上提交,输出提交日志能得到的最大分值。
输入:每个时刻待提交的日志条数如 1 50 40
输出:提交日志能够得到的最大分值
例子:输入:1 98 1 输出 :98
思路很简单就是从第一个时刻开始计算每个时刻提交能得多少分,找到最大的就行。
代码也没全部通过,只有70%。

3.题目描述:有两个数字是s,t。我们通过加减a,b使得s变成t,b的使用次数无限制,求a的最少使用次数。
输入 :s t a b
输出:a最少使用次数
例子:输入:11 13 4 10 输出:2
思路:想简单点就是假设s<t,a<b。两种情况t=s+m1b+n1a,t=s+m2b-n2a。
其他的情况就是对称的加变减,减变加而已。还有一种t=s-m1b+an1,不过这种很显然需要用到更多次a,因为赶时间就直接否了没考虑,针对两种情况算出一个n值来,如果只有一个就是他,如果有两个,就取小的。
最后通过率子80%。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值